我遇到类似的问题,其他人使用托管c#应用程序调用非托管c ++ dll,但是我找不到可行的解决方案。我已将第三方非托管dll包含在项目中,并将发布后的clickOnce包含在同一目录中。
我将我的c#项目编译为32位。发布版本使用visual studio 2012在我的开发系统和其他系统上运行。
[DllImport(@"controller.DLL", CallingConvention = CallingConvention.Cdecl)]
public static extern int XR2_hexCmnd(int xr2Hex_command);
在没有visual studio 2012的其他电脑上运行时,我收到以下错误: System.DllNotFoundException:无法加载DLL' controller.DLL':找不到指定的模块。 (HRESULT异常:0x8007007E)
使用clickOnce发布时出现同样的错误。
我有InstallShield的演示版。当我运行InstallShield时,它适用于任何PC。如果我卸载该程序,请单击“一次”(在使用installShield之前它无效)。创建InstalShield安装程序时,它发现存在MSVCR110.dll的依赖关系(我在使用publish创建的项目目录中包含此dll,并且在运行InstallShield之前它仍然无效)。
Dependency Walker似乎不适合这个项目。据报道,即使在PC工作的地方,也有很多dll缺失。我包含了所有丢失的dll,并且在使用installShield之前应用程序仍然无效。
不幸的是,InstallShield不是一个选项,因为该应用程序将被合并到更大的应用程序中。