2016-11-04 3 views
-1

Я пытаюсь использовать модуль «cards.dll», чтобы создать визуальную карточную игру, и я не могу понять, несмотря на все ошибки в Googling I возможно думаю. У меня есть DLL-файл (203 024 байта), но я запутался в «регистрации» как .NET или COM-сборке. Я пробовал:Пытаюсь использовать cards.dll на 64-битной Windows 10

  • добавив его в качестве ссылки (внутри Visual Studio 2015) reference could not be added
  • Явное загрузки это

    Ассамблея а = Assembly.LoadFile (@ "/ cards.dll") ;

с результатом: Модуль, как ожидается, содержит манифест сборки. (Исключение из HRESULT: 0x80131018)

  • Я попытался regsvr32.exe cards.dll, (с и без /u и /i), но я получаю сообщение: enter image description here

Я скопировал DLL в C: \ Windows \ System32 и C: \ Windows \ SysWOW64, но безрезультатно.

Я запускаю это (или, по крайней мере, пытаюсь) на 64-битной машине Windows 10 с ядром i5.

Вот выход свалки на нем. dumpbin output

+0

Есть много библиотек DLL вокруг, которые не COM сервер, так что не содержит библиотеку типов и не являются .NET сборки, поэтому не содержат метаданные. Используйте Dumpbin.exe/exports, чтобы узнать, содержит ли он какие-либо экспортированные функции, которые вы можете вызывать. И в VS используйте File> Open> File и выберите DLL, чтобы увидеть, содержит ли он какие-либо неуправляемые ресурсы. Вероятно, растровые изображения. Кто-то владеет авторским правом на это, позвоните им. –

+0

dumpbin не показывает экспортированные товары. Вот что показывает Visual Studio: http://prntscr.com/d36tvb Я не думал, что это будет загадочный файл - он рекламируется как файл DLL, в котором используются стандартные игры, такие как Solitaire. –

+0

Cards.dll скорее всего не является библиотекой COM. Это, скорее всего, стандартная DLL, которая не требует регистрации. Если, конечно, это было переписано совершенно без причины в последнее время, потому что это было задолго до того, как .NET даже существовал. Он также не содержит экспорта, поскольку он не содержит никаких функций, что было бы еще одним аргументом против его переписывания. Это полный набор ресурсов (изображений), но не исполняемый код, как показывает ваш dumpbin (см. Запись .rsrc). –

ответ

-1

Я выяснил, с информацией по этой ссылке на Catch22.net. Ключевое Усвоение было: `

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

Буду рад узнать, почему этот ответ был опущен. В конце концов, он работает, и код IS в этой DLL. –