c# - c# dllimport 试图加载格式不正确的程序
问题描述
我想在我的 C# 代码中导入一个外部 C++ DLL。但是我的以下代码不起作用...
我用“任何 CPU”构建我的 C#,我的 C++ DLL 是用 32 位构建的。
这是我的 C++ DLL 函数:
extern "C" DWORD __stdcall ScanForIed(LPSTR lpstrHtmlIedTag, LPSTR lpStartIpAddress, DWORD iNbAddressesToScan, LPSTR lpSelectedAddress)
{// exported function (entry point)
#ifdef _DEBUG
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
AFX_MANAGE_STATE(AfxGetStaticModuleState());
USES_CONVERSION;
DWORD uiReturnVal = -1;
CString strBuf;
TCHAR tcBuf[256] = { 0 };
MBS2WSTR(lpStartIpAddress, tcBuf);
........
return uiReturnVal;
}
还有我调用 DLL 的 C# 函数:
[System.Runtime.InteropServices.DllImport("C:\\Users\\212721485\\Documents\\CBWatch\\Archive_CBW3\\CBW3SyncFiles\\CBW3SyncFiles\\IEDfinder.dll")]
public static extern int ScanForIed(StringBuilder lpstrHtmlIedTag, StringBuilder lpStartIpAddress, uint iNbAddressesToScan, StringBuilder lpSelectedAddress);
private void buttonSearchIp_Click(object sender, EventArgs e) {
StringBuilder test1 = new StringBuilder("CBWatch3");
StringBuilder test2 = new StringBuilder("10.5.47.1");
StringBuilder test3 = new StringBuilder("10.5.47.153");
ScanForIed(test1,test2,100,test3);
}
我尝试对 LPSTR 参数使用“StringBuilder”或“string”,对 DWORD 参数使用“uint”。我试图用 32 位构建我的 C# 程序,但我有同样的错误
当我运行我的程序时,我有这个错误:
“试图加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)”
你有一些问题的想法吗?感谢您的帮助!
解决方案
推荐阅读
- java - 将 Spring 应用程序重新连接到 Kafka Brokers 以生成消息
- javascript - 没有找到 JQuery .autocomplete?
- python - 自定义 dash-daq 仪表的旋钮
- java - 在 Android (JAVA) 中使用 .cer(公钥)和 .pfx(私钥)对字符串进行签名和验证
- c# - HttpUtility.HtmlDecode 返回相同的字符串
- node.js - Array.map() 中的 NodeJS 内存问题
- python - 挣扎于python比较问题
- blockchain - 在 Remix 中创建 my_smart_contract 待处理
- laravel - laravel restful api 不返回 access_token
- netsuite - 更改 Netsuite 中的 REPRESENTS SUBSIDIARY 字段