64位调用32位dll com服务器例子
时间: 2023-06-14 22:05:30 浏览: 203
要在64位操作系统上调用32位DLL com服务器,需要采取以下步骤:
1. 使用Visual Studio 2010或更高版本,创建一个32位DLL com服务器项目。
2. 在32位DLL com服务器项目中,将所有的函数和接口设置为标准的stdcall调用约定。
3. 使用Regsvr32.exe在32位DLL com服务器项目中注册DLL。
4. 在64位应用程序中,使用CoCreateInstance函数调用32位DLL com服务器。
以下是示例代码,展示了如何在64位应用程序中调用32位DLL com服务器:
```C++
// Declare the function prototype for the CoCreateInstanceEx function.
typedef HRESULT(WINAPI *PfnCoCreateInstanceEx)(REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*);
// Create an instance of the COSERVERINFO structure and set the value of its members.
COSERVERINFO si;
memset(&si, 0, sizeof(si));
si.dwSize = sizeof(si);
si.pwszName = L"localhost";
si.pAuthInfo = NULL;
// Load the 32-bit version of ole32.dll.
HMODULE hOle32 = LoadLibrary(L"ole32.dll");
// Get the address of the CoCreateInstanceEx function.
PfnCoCreateInstanceEx pfnCoCreateInstanceEx = reinterpret_cast<PfnCoCreateInstanceEx>(GetProcAddress(hOle32, "CoCreateInstanceEx"));
// Call the CoCreateInstanceEx function to create an instance of the object.
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"YourProgID", &clsid);
if (SUCCEEDED(hr))
{
MULTI_QI mq;
memset(&mq, 0, sizeof(mq));
mq.pIID = &IID_IYourInterface;
hr = pfnCoCreateInstanceEx(clsid, NULL, CLSCTX_LOCAL_SERVER, &si, 1, &mq);
if (SUCCEEDED(hr))
{
IYourInterface* pYourInterface = reinterpret_cast<IYourInterface*>(mq.pItf);
// Use the interface.
// ...
// Release the interface.
pYourInterface->Release();
}
}
// Unload the ole32.dll.
FreeLibrary(hOle32);
```
请注意,此代码仅用于参考。在实际使用时,请根据您的特定情况进行修改。
阅读全文