在使用LoadLibrary装载某个dll的时候返回NULL,然后调用GetLastError返回998,意思是说“内存位置访问无效。”,问题很奇怪,因为前一段时间还能正确加载,网上搜索也是说什么的都有,最后调查发现是由于LoadLibrary是在应用程序全局变量初始化的时候调用的,如果LoadLibrary放到应用程序初始化完成后就不会出现这个问题(或者在主窗体构造时),看样子这个动态库不能装载过早,可能是由于其他系统依赖库还没有加载造成的(比如LoadLibrary函数所在的库)。
2017年9月5号最新进展(备注:c++builder的exe调用VC++ dll):
LoadLibrary中的参数使用变量时,不会出现此问题,或者使用LoadLibraryA和LoadLibraryW也不会出现此问题,比如:
String dllName = "decoder.dll";
hDll = LoadLibrary(dllName.c_str());//ok
hDll = LoadLibraryA("decoder.dll");//ok
hDll = LoadLibraryW(L"decoder.dll");//ok
//hDll = LoadLibrary(_T("decoder.dll"));//fail
最后定位到一个其他函数中的一个数组初始化会影响到LoadLibrary函数返回值,
char szHead[5] = {0};
C++ builder 太奇怪了,或者还没有找到真正的原因!