我用ATL COM APPWizard创建了一个dll,并且在其中使用Simple Object生成一个接口.这个接口就有只有一个简单的方法Show。然后我把这个dll拷贝到另一个新工程目录下,接着我在这个新工程中,使用了如下语句
CoInitialize(NULL);
HMODULE hModule;
hModule = LoadLibrary("NewAtlTest.dll");
typedef HRESULT (*pFunc)();
pFunc fun;
fun = (pFunc)GetProcAddress(hModule,"Show");//问题是出在这里,在这里发现fun的地址是空的
fun();//调用函数
CoUninitialize();
看了以前相关的贴子,还是不明白,希望高人指点!!
CoInitialize(NULL);
HMODULE hModule;
hModule = LoadLibrary("NewAtlTest.dll");
typedef HRESULT (*pFunc)();
pFunc fun;
fun = (pFunc)GetProcAddress(hModule,"Show");//问题是出在这里,在这里发现fun的地址是空的
fun();//调用函数
CoUninitialize();
看了以前相关的贴子,还是不明白,希望高人指点!!
1.应用程序装载的目录;
2.当前目录;
3. Windows 95: Windows系统目录(X:\Windows\System);
Windows NT: 32位Windows系统目录(X:\Windows\System32);
4. Windows目录;
5.PATH环境变量中所列的目录。
“然后我把这个dll拷贝到另一个新工程目录下”这也许就是问题所在。
“然后我把这个dll拷贝到另一个新工程目录下”这不就可以让编译器找到这个dll。
还有我察看了hModule 的值为0x10000000,我对这个值感到很奇怪!
if (hinstLib != NULL)
{
......
}
这个方法我也试过了,没有效果!
Show @1
我使用的atl app wizard来创建组件的,添加接口方法的时候我也是使用了wizard
不是手动添加。系统应该会自动的维护.def
[id(1), helpstring("method Show")] HRESULT Show();
COM动态库只要注册,然后声明一个COM对象,然后就可以针对COM接口进行操作了
这可是学COM的基础
使用cocreateinstance的方法,已经没有什么问题了!
我不过想看看LoadLibrary的使用
难道是他不支持ATL 创建的DLL,可能性不大吧!
等待高手!!
下面是普通DLL的调用:
//如何调用DLL文件
// 1. loadlibrary
hDll = LoadLibrary("DisplayAppName");// 2. GetProcAddress
typedef (void)(*LPDisplayAppName)(void)
LPDisplayAppName DisplayAppName;
DisplayAppName=(LPDisplayAppName)GetProcAddress(hDll,"DisplayAppName");// 3. call
DisplayAppName();// 4. freelibrary
FreeLibrary(hDll);
系统负责调度Com库