CodeFx:一站式微软开发技术解决方案
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-29
va_start(marker, cArgs); if (!pDisp) { _putts(_T("NULL IDispatch passed to AutoWrap()")); _exit(0); } // Variables used DISPPARAMS dp = { NULL, NULL, 0, 0 }; DISPID dispidNamed = DISPID_PROPERTYPUT; DISPID dispID; HRESULT hr; char szName[200]; // Convert down to ANSI WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL); // Get DISPID for name passed hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID); if (FAILED(hr)) { _tprintf(_T( "IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx\n" ), szName, hr); return hr; } // Allocate memory for arguments VARIANT *pArgs = new VARIANT[cArgs+1]; // Extract arguments for(int i=0; i<cArgs; i++) { pArgs[i] = va_arg(marker, VARIANT); } // Build DISPPARAMS dp.cArgs = cArgs; dp.rgvarg = pArgs; // Handle special-case for property-puts if (autoType & DISPATCH_PROPERTYPUT) { dp.cNamedArgs = 1; dp.rgdispidNamedArgs = &dispidNamed; } // Make the call hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL); if (FAILED(hr)) { _tprintf(_T( "IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx\n" ), szName, dispID, hr); return hr; } // End variable-argument section va_end(marker); delete[] pArgs; return hr; } 4)DLL的延迟加载使得我们不需要使用LoadLibrary和GetProcAddress。这 样的好处是直到程序调用DLL中的函数时才加载此DLL。
卸载延迟加载的DLL的代码:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于CodeFx:一站式微软开发技术解决方案的所有评论