松鼠的博客

导航

统计

C++ Builder 使用COM

COM开发环境:Visual Studio 2008

注意事件:

  1. 1.需要包含由Visual Studio 2008生成的COM头文件,类似于 MyAtl_i.c

注册COM

复制代码
void __fastcall TForm1::ComBtnClick(TObject *Sender)
{    
    AnsiString dllPath 
= ExtractFilePath(Application->ExeName) + "MyAtl.dll";
    HMODULE hDLL 
= ::LoadLibrary( dllPath.c_str() );// 动态装载组件
    if(hDLL)
    
{
        FREG lpfunc 
= (FREG)::GetProcAddress( hDLL,"DllRegisterServer");    // 取得注册函数指针
        
// 如果是反注册,可以取得"DllUnregisterServer"函数指针
        if ( lpfunc )lpfunc();    // 执行注册。这里为了简单,没有判断返回值
        ::FreeLibrary(hDLL);
        ShowMessage(
"注册组件成功!");
    }

}
复制代码
获取COM对象,并调用COM方法
复制代码
void __fastcall TForm1::BtnShowComMsgClick(TObject *Sender)
{
    CoInitialize(NULL);
//初始化COM
    IMusic* music;
    HRESULT hr 
= CoCreateInstance(Myatllib_tlb::CLSID_Music,NULL,CLSCTX_INPROC_SERVER    ,Myatllib_tlb::IID_IMusic,(void**)&music);
    
if(SUCCEEDED(hr))
    
{
        BSTR v;
        music
->GetTitle(&v);
        
this->EditMsg->Lines->Add(AnsiString(v));
        
this->EditMsg->Lines->Add("创建COM对象成功!");
        music
->Release();
    }

    CoInitialize(NULL);
}
复制代码

 

相关参考:
COM技术内幕 第七章,类厂 CoCreateInstance 函数

posted on   Xproer-松鼠  阅读(834)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示