这样加载DLL,获取DLL函数地址,怎么实现不了,请指教

wzswgbx 2018-08-23 07:45:24
该DLL是VB-P-CODE的

HINSTANCE hDll=NULL;//加载动态连接库句柄

typedef BOOL ( *xcMyZip)(char *,char *,char *); //

xcMyZip ProcAddr;

hDll=::LoadLibrary("YmlDllK.dll"); //加载DLL

ProcAddr=(xcMyZip)::GetProcAddress (hDll,"xcMyZip");

FreeLibrary(hDll);



...全文
287 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2018-09-07
  • 打赏
  • 举报
回复
如果就你自己用, 不用注册,知道com原理就行
LoadLibrary 后,coclass guid, 接口guid 你要知道

HRESULT
CreateCOMObject(HMODULE hMod, // [in]
REFCLSID iidClass, // [in] CLSID of the COM object to create
REFIID iidInterface, // [in] GUID of the interface to get
LPVOID FAR* ppIface) // [in] on success, interface to the COM object is returned
{
HRESULT hr = S_OK;
HRESULT (WINAPI *pfnGetFactory)(REFCLSID, REFIID, void**);

*ppIface = NULL;

pfnGetFactory = (HRESULT (WINAPI *)(REFCLSID, REFIID, void**))GetProcAddress(hMod, "DllGetClassObject");
if ( ! pfnGetFactory)
return HRESULT_FROM_WIN32(GetLastError());

IClassFactory* pFactory = NULL;
hr = pfnGetFactory(iidClass, IID_IClassFactory, (void**)&pFactory);
if (SUCCEEDED(hr)) {
hr = pFactory->CreateInstance(NULL, iidInterface, (void**)ppIface);
pFactory->Release();
}

return hr;
}
wzswgbx 2018-09-07
  • 打赏
  • 举报
回复
通过]QueryInterface,能否获取地址呢
wzswgbx 2018-08-25
  • 打赏
  • 举报
回复
谢谢,我试一下
l357630798 2018-08-25
  • 打赏
  • 举报
回复
有GUID/CLSID,是个COM组件,不能直接LoadLibrary。
此外,要使用这个DLL,你还要先确保注册了,你才能CoCreateInstance,否则也是徒劳。
zgl7903 2018-08-24
  • 打赏
  • 举报
回复
这个应该是个COM组件, 和普通的DLL不同, 应该按 CoCreateInstance 的方式启动组件
oyljerry 2018-08-24
  • 打赏
  • 举报
回复
需要用CoCreateInstance, QueryInterface的方式来调用com组件的接口

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧