2011-01-11 29 views
0

加載Win32本地DLL文件我有一個C#winapp。我從C#應用程序調用一個本地.dll文件(由我自己創建),並且它工作正常。無法從C#.NET

但是,當我在我的應用程序(.exe和.dll文件)拷貝到另一臺機器,我得到一個錯誤,指出:

無法加載DLL「C:\ dllname.dll」:指定的模塊找不到。 (異常來自HRESULT:0x8007007E)

下面是C#代碼:

class IsoMessageHelper 
{ 
    public const string ISO8583_DLL = "c:\\Hc8583.dll"; 
    [DllImport(ISO8583_DLL, CallingConvention = CallingConvention.Cdecl)] 
    public static extern bool InitializationRq(...) 
} 

我該怎麼辦?

+0

安置自己的``從你的C#代碼的聲明,請。 – 2011-01-11 08:11:53

+0

我編輯了這篇文章,並編寫了C#dll導入代碼。 – losingsleeep 2011-01-11 08:14:24

+0

我注意到你的代碼仍然硬編碼到C:\目錄中DLL的路徑。正如其他答案所建議的那樣,沒有理由這樣做。應用程序將自動加載與其可執行文件放在同一目錄中的DLL。所有你需要的是文件名。 – 2011-01-11 08:41:38

回答

5

部署具有原生的依賴.Net應用程序時的一個共同問題,就是本地的dll可以在目標計算機上進行例如缺少依賴自己C運行時的正確版本。

使用這種Dependency Walker一個工具來分析您的本機DLL,並確定它是否有您已經複製過它在機器上丟失的依賴。

1

儘量不要硬編碼在指定的文件名DllImport屬性參數的任何路徑。那麼你應該使除了可執行文件之外的文件是正確的。

事情是這樣的:

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
1

移動的DLL到根。如果這樣做,然後看看你的屬性,以確定爲什麼。你還沒有發佈任何代碼,所以我不能給你任何具體的原因。