各位,我用vc编写的一个简单的dll,如下:
extern "C" _declspec(dllexport) int Add(int a,int b)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TRACE("Entering DllAdd\n");
return a+b;
}
编译生成MFCDllTest.dll,可是在C#中调用出现问题:
[DllImport("MFCDllTest.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int Add(int a, int b);
int t = Add(5,10);无法加载 DLL“MFCDllTest.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。不知问题出现在哪里?我已经将MFCDllTest.dll放在bin目录和system32下,还是不行,求解决方法!
extern "C" _declspec(dllexport) int Add(int a,int b)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TRACE("Entering DllAdd\n");
return a+b;
}
编译生成MFCDllTest.dll,可是在C#中调用出现问题:
[DllImport("MFCDllTest.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int Add(int a, int b);
int t = Add(5,10);无法加载 DLL“MFCDllTest.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。不知问题出现在哪里?我已经将MFCDllTest.dll放在bin目录和system32下,还是不行,求解决方法!
[DllImport("Kernel32")] //读取动态库文件
public static extern int GetProcAddress(int handle, String funcname);
[DllImport("Kernel32")]
public static extern int LoadLibrary(String funcname);
[DllImport("Kernel32")]
public static extern int FreeLibrary(int handle);
[DllImport("HmPark.dll")] //声明C++中的接口函数, 其中 HmPark 为你的动态库文件名
public static extern double GetStdCharge(UInt32 time_In, UInt32 time_Out); private int huser32 = 0;
private void CountCharge()
{
double dCharge = 0;
try
{
huser32 = LoadLibrary("HmPark.dll"); //载入动态库
dCharge = GetStdCharge(time_In, time_Out); //调用 C++ 中的接口函数
}
catch (Exception ex)
{
MessageBox.Show("调用出错: " + ex.Message, "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
try
{
Inspect.FreeLibrary(huser32); //释放动态库文件, 否则会弹出异常
}
catch (Exception ee)
{
MessageBox.Show("释放出错: " + ee.Message, "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}另: 注意你 VC程序中的 Add 函数是否有导出。
你是放在 bin 目录下的么? 应该是放在 bin 的 debug 或 release 目录下吧?
2.看看你的DLL是不是还要依赖其他的dll,depends可以看.
3.可能性较小,你的C#声明处显示指明调用协议是cdecl,你的C++项目的默认调用协议是不是设成stdcall或者其他的了
暂时能想到的就这么多了.
为了测试,我分别都放了一个(bin 和bin 下的debug 目录下)
extern "C" _declspec(dllexport) int Add(int a,int b)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TRACE("Entering DllAdd\n");
return a+b;
} 而且我的DLL中只有这一个简单的函数,应该不会依赖其他的dll了。
再次感谢各位关注,结贴了。