2016-11-04 61 views
-1

我試圖利用「cards.dll」模塊來創建一個可視卡片遊戲,並且我似乎無法弄清楚儘管所有的谷歌搜索我可以考慮去做。我有DLL文件(203,024字節),但我對「註冊」作爲.NET或COM程序集感到困惑。我曾嘗試:試圖在64位Windows上使用cards.dll 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文件夾以及,但無濟於事。

我正在使用i5核心在64位Windows 10機器上運行(或至少嘗試)。

這是它的dumpbin輸出。 dumpbin output

+0

有很多周圍的DLL是不是一個COM服務器,因此不包含類型庫和不是一個.NET程序集,所以不要包含元數據。使用Dumpbin.exe/exports查看它是否包含任何可導出的導出函數。並在VS中使用File> Open> File並選擇該DLL以查看它是否包含任何非託管資源。位圖可能會存在。有人擁有這個版權,給他們打電話。 –

+0

dumpbin顯示沒有導出的項目。以下是Visual Studio顯示的內容:http://prntscr.com/d36tvb我並不認爲這將是一個神祕的文件 - 它被廣告爲標準遊戲(如紙牌遊戲)使用的dll文件。 –

+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

我希望知道爲什麼這個答案是downvoted。畢竟,它可以工作,並且代碼在該DLL中。 –

相關問題