2016-11-04 2 views
-1

Ich versuche, das Modul "cards.dll" zu verwenden, um ein visuelles Kartenspiel zu erstellen, und ich kann nicht scheinen, es trotz des ganzen Googelns I herauszufinden kann denken, zu tun. Ich habe die DLL-Datei (203.024 Bytes), aber ich bin verwirrt über die "Registrierung" als .NET oder eine COM-Assembly. Ich habe versucht:Versuchen, cards.dll auf 64-Bit-Windows 10 zu verwenden

  • als Referenz hinzugefügt (in Visual Studio 2015) reference could not be added
  • Explizit Laden es

    Assembly a = Assembly.LoadFile (@ "/ cards.dll") ;

mit dem Ergebnis: Das Modul wurde erwartet, dass ein Baugruppe manifest enthalten. (Ausnahme von HRESULT: 0x80131018)

  • Ich habe regsvr32.exe cards.dll versucht, (mit und ohne /u und /i), aber ich bekomme die Meldung: enter image description here

ich die DLL in die C kopiert habe: \ Windows \ System32 und C: \ Windows \ SysWOW64 Ordner auch, aber ohne Erfolg.

Ich führe dies (oder versuche es zumindest) auf einem 64-Bit-Windows 10-Rechner, mit einem i5-Core.

Hier ist der Dumpbin-Ausgang darauf. dumpbin output

+0

Es gibt viele DLLs um die so nicht ein COM-Server sind keine Typbibliothek enthalten und sind kein .NET-Assembly also nicht enthalten Metadaten. Verwenden Sie Dumpbin.exe/exports, um zu sehen, ob es exportierte Funktionen enthält, die Sie pinnen können. Und in VS verwenden Sie Datei> Öffnen> Datei und wählen Sie die DLL aus, um festzustellen, ob sie nicht verwaltete Ressourcen enthält. Bitmaps wären wahrscheinlich. Jemand besitzt das Urheberrecht an diesem, rufen Sie sie an. –

+0

dumpbin zeigt keine exportierten Elemente. Hier ist, was Visual Studio zeigt: http://prntscr.com/d36tvb Ich dachte nicht, dass dies eine mysteriöse Datei wäre - es wird beworben als DIE DLL-Datei, die Standard-Spiele wie Solitaire verwenden. –

+0

Cards.dll ist höchstwahrscheinlich keine COM-Bibliothek. Es ist wahrscheinlich eine Standard-DLL, die keine Registrierung erfordert. Es sei denn, es wurde in letzter Zeit aus absolut keinem Grund neu geschrieben, weil es schon lange vor .NET existierte. Es enthält auch keine Exporte, da es keine Funktionen enthält, was ein anderes Argument dafür wäre, dass es neu geschrieben wurde. Es ist voller Ressourcen (Bilder), aber kein ausführbarer Code, wie Ihr Dumpbin zeigt (siehe den Eintrag .rsrc). –

Antwort

-1

Ich fand es mit den Informationen unter diesem Link auf Catch22.net heraus. Die wichtigsten Erkenntnisse waren: `

static class NativeMethods 
{ 
[DllImport("kernel32.dll")] 
public static extern IntPtr LoadLibrary(string dllToLoad); 
[DllImport("kernel32.dll")] 
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); 
} 
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] 
private delegate bool cdtInit(ref Int32 width, ref Int32 height); 
dll = NativeMethods.LoadLibrary(@"\path\cards32.dll"); 
IntPtr addr; 
addr = NativeMethods.GetProcAddress(dll, "cdtInit"); 
mycdtInit = (cdtInit)Marshal.GetDelegateForFunctionPointer(addr, typeof(cdtInit)); 
Int32 width = 71; 
Int32 height = 95; 
var result = mycdtInit(ref width, ref height); 

`

+0

Ich würde gerne wissen, warum diese Antwort abgelehnt wurde. Schließlich funktioniert es, und der Code ist in dieser DLL. –

Verwandte Themen