大家好,感谢您的时间。这是在 Visual Studio 2012 中创建的,我使用的是标准的 Windows 库。
我正在尝试显式调用 DLL 函数,并且我相信我编写的代码是正确的;但是,我收到一个错误。我不确定这是我在小型 C 控制台应用程序中编写的内容还是从我无法访问其内部工作的 DLL 中编写的错误。
//global area
HINSTANCE _createInstance;
typedef UINT (CALLBACK* LPFNDLLFUNCLOOKUP)(AccuInput*, AccuOut*);
LPFNDLLFUNCLOOKUP lpfnDllFuncCASSLookup;
typedef UINT (CALLBACK* LPFNDLLFUNCINIT)(BSTR);
LPFNDLLFUNCINIT lpfnDllFuncInit;
typedef UINT (CALLBACK* LPFNDLLFUNCCLOSE)();
LPFNDLLFUNCCLOSE lpfnDllFuncClose;
HMODULE unmanagedLib;
这是我的主要功能:
int main() {
// Load Library
BSTR configFile;
unmanagedLib = LoadLibraryA((LPCSTR) "AccuAddressUnMgd.dll");
// Initialize AccuAddress COM dll
lpfnDllFuncInit = (LPFNDLLFUNCINIT)GetProcAddress(unmanagedLib, (LPCSTR)"Init");
// This function will lookup the address
lpfnDllFuncCASSLookup = (LPFNDLLFUNCLOOKUP)GetProcAddress(unmanagedLib, (LPCSTR)"AccuCassLookup");
// This function will call AccuAddress COM DLL Close function
lpfnDllFuncClose = (LPFNDLLFUNCCLOSE)GetProcAddress(unmanagedLib, (LPCSTR)"Close");
// Append “config.acu” file path.
configFile = SysAllocString(L"C:\PathTo\Config.acu");
printf("ConfigPath created");
lpfnDllFuncInit(configFile);
printf("ConfigFile consumed");
SysFreeString(configFile);
return 0;
}
这是我收到的错误:
Unhandled exception at at 0x75D4C54F in RDISample1.exe: Microsoft C++ exception: _com_error at memory location 0x001AFAC0.
错误发生在:
lpfnDllFuncInit(configFile);
所以,我想我的问题有两个部分。基于代码,我可以说错误出在 DLL 函数中吗?
第二个问题,当调用GetProcAddress 时,将字符串封装在LPCSTR 中(如函数与类型转换)有何意义(如果有)?IE
lpfnDllFuncClose = (LPFNDLLFUNCCLOSE)GetProcAddress(unmanagedLib, LPCSTR("Close"));
再次感谢您的帮助。我一直在做大量的研究,但 DLL 仍然很困惑。
初始错误是由您使用的库未能正确处理不存在的文件引起的。
您提供的路径包含单斜杠\
,它们被视为转义字符,而不是路径分隔符。路径分隔符必须转义,即\\
正确处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句