我在64位的Windows 7盒与开发的Visual Studio 2012(11.0.51106.01更新1)。
我有一些编译C代码为(32位)DLL中的支持项目。 在我的头,我有:
#define RET_TYPE(type) _declspec(dllexport) type __stdcall
RET_TYPE(int) test_dll_call(int invar);
在我的C文件我有:
RET_TYPE(int) test_dll_call(int invar)
{
int retVal = 4 * invar;
return retVal;
}
我也有一个(32位)WPF C#加载一个类,如下所示的内部的DLL应用:
[DllImport("MyDll.dll", CharSet = CharSet.Ansi, BestFitMapping = true, ThrowOnUnmappableChar = true)]
public static extern int test_dll_call(int invar);
这被包裹如下:
public void Wrap_TestDllCall()
{
try
{
int outTest = 0;
int invar = 3;
outTest = test_dll_call(invar);
}
catch (Exception ex)
{
dllError = ex.ToString();
}
}
当我在调试器上我的开发运行它,这工作正常。 如果我所有相关的文件复制到一个单独的文件夹,并从那里运行它,它工作正常。
如果我所有必要的文件夹复制到运行32位Windows XP SP3,我得到以下错误另一台计算机:
System.DllNotFoundException: Unable to load DLL 'MyDll.dll': The specified procedure could not be found. (Exception from HRESULT: 0x8007007F)
at MyNamespace.MyClass.test_dll_call(Int32 invar)
at MyNamespace.MyClass.Wrap_TestDllCall()
我用的Dependency Walker在我的两个编译EXE和DLL; 它发现的唯一缺少的DLL wer.dll
和ieshims.dll
,从我的研究不需要在XP。
我已经安装了VS2012 C ++可再发行,和.NET 4和.NET 4.0.3更新。 仍然没有运气。
编辑正如汉斯指出,这似乎是应用程序无法在DLL中找到的程序; 我也曾尝试:
[DllImport("MyDll.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern int test_dll_call(int invar);
和
__declspec(dllexport) int __cdecl test_dll_call(int invar);
这也适用于我的dev的盒子很好,但给出了WinXP的箱相同的错误。
救命!