我用 C++ 编写了一个动态链接库并正确导出它,以便 Go 能够使用 Win32 API 获取适配器信息。但是当我在 Go 中调用它的函数时,它抛出“找不到指定的过程”错误。我是 Go 的新手,所以我不知道如何解决它。有人可以帮助我吗?这是有关我的环境的一些信息:平台:windows 10 x64CXX 编译器:visual c++ 15.3去版本:go1.11.2 windows/amd64这是我的代码:#include "stdafx.h"#include <WinSock2.h>#include <iphlpapi.h>#include <iostream>#include <vector>using namespace std;__declspec(dllexport) const char *get_default_gateway();vector <string> default_gateway;const char *get_default_gateway(){ PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO(); PIP_ADAPTER_INFO info_p; unsigned long stSize = sizeof(IP_ADAPTER_INFO); int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize); info_p = pIpAdapterInfo; if (ERROR_BUFFER_OVERFLOW == nRel) { delete pIpAdapterInfo; pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize]; nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize); info_p = pIpAdapterInfo; } if (ERROR_SUCCESS == nRel) { while (info_p) { IP_ADDR_STRING *pIpAddrString = &(info_p->IpAddressList); do { string gateway_tmp = info_p->GatewayList.IpAddress.String; if (gateway_tmp != "0.0.0.0") { default_gateway.push_back(info_p->GatewayList.IpAddress.String); } pIpAddrString = pIpAddrString->Next; } while (pIpAddrString); info_p = info_p->Next; } } if (pIpAdapterInfo) { delete []pIpAdapterInfo; } const char *gateway = default_gateway.at(0).c_str(); return gateway;}
1 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
很有可能您遇到了 C++ 编译器对导出函数的名称应用名称修改的影响,因此它实际上并没有按照您在库的导出表中期望的方式命名。您可以使用 objdump 或古老的depends.exe
. 最简单的方法是将导出函数的声明包装到extern "C" { ... }
—复习一下。
- 1 回答
- 0 关注
- 161 浏览
添加回答
举报
0/150
提交
取消