c++ builder如何调用c#组件

fxh210 2015-12-15 11:22:46
你们好,想请教大神一个问题。我从来没接触过c++ builder和c#,但是公司让我测试怎么在c++ builder调用c#com组建,给了我一个文件夹,包含.dll和.pdb,其他没了。组件里的函数就是简单的加法,让我在c++ builder调用输出结果。我查了很多网上的资料,但对于c++builder和c#实在不熟,所以。。。还望看在我第二天入职的份上,期待解答。。。
...全文
2339 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxh210 2015-12-18
  • 打赏
  • 举报
回复
引用 9 楼 DelphiGuy 的回复:
这里有一个例子,不过是VC的:https://support.microsoft.com/zh-cn/kb/828736
恩,我明天试试,刚下班,谢谢啦
  • 打赏
  • 举报
回复
这里有一个例子,不过是VC的:https://support.microsoft.com/zh-cn/kb/828736
fxh210 2015-12-17
  • 打赏
  • 举报
回复
引用 6 楼 DelphiGuy 的回复:
从楼主的说明来看,这个c# com组件应该是managed dll,不能直接作为一般dll调用,也不能用regsvr32注册,要用.net工具regasm.exe注册,同时生成一个类型库.tlb,在C++程序中引入这个类型库: #import "xxx.tlb" raw_interfaces_only 初始化com: HRESULT hr = CoInitialize(NULL); 然后建立接口指针,通过借口指针调用某个方法,具体要看managed dll中的定义。
给我的是一个TrapControl.dll,然后我把.tlb加入到ActiveX中了,有个IonTrap组件。
fxh210 2015-12-17
  • 打赏
  • 举报
回复
引用 6 楼 DelphiGuy 的回复:
从楼主的说明来看,这个c# com组件应该是managed dll,不能直接作为一般dll调用,也不能用regsvr32注册,要用.net工具regasm.exe注册,同时生成一个类型库.tlb,在C++程序中引入这个类型库: #import "xxx.tlb" raw_interfaces_only 初始化com: HRESULT hr = CoInitialize(NULL); 然后建立接口指针,通过借口指针调用某个方法,具体要看managed dll中的定义。
您看一下我写的,上面是.h,下面是.cpp,结果就是P为空。我也看了好多方法,有您说的那样。但是我不会写,头文件都不知道要怎么加。还望您贴出来详细.h和.cpp代码,我不是伸手党。实在不会,今天第三天了还没搞懂。 #ifndef Unit1H #define Unit1H #include <Classes.hpp> #include <Controls.hpp> #include <Buttons.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations int __stdcall(*Add)(int,int); __fastcall TForm1(TComponent* Owner); //public: // User declarations }; extern PACKAGE TForm1 *Form1; #endif 。。。。。。。。。。。。。。。。。。。。。。 #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" HINSTANCE HmyDLL; TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { HmyDLL=LoadLibrary("TrapControl.dll"); } void __fastcall TForm1::Button1Click(TObject *Sender) { int n; FARPROC P; //函数地址变量P if(HmyDLL != NULL) { P=GetProcAddress(HmyDLL,"Add"); //获取动态链接库中Add()的地址 if(P==NULL) { ShowMessage("open Add() error..."); } else { Add=(int __stdcall(__cdecl*)(int,int))P; n=Add(1,2); ShowMessage(IntToStr(n)); } } else { ShowMessage("open TrapControl.dll error..."); } } 我就这样写的,还有论坛上一种傻瓜式调用,我代码都看不懂。看您了解这块,希望详细为我解答,谢谢谢谢。
银点 2015-12-16
  • 打赏
  • 举报
回复
COM组件是需要注册的!用 regsvr32 XXX.dll去注册
  • 打赏
  • 举报
回复
从楼主的说明来看,这个c# com组件应该是managed dll,不能直接作为一般dll调用,也不能用regsvr32注册,要用.net工具regasm.exe注册,同时生成一个类型库.tlb,在C++程序中引入这个类型库: #import "xxx.tlb" raw_interfaces_only 初始化com: HRESULT hr = CoInitialize(NULL); 然后建立接口指针,通过借口指针调用某个方法,具体要看managed dll中的定义。
fxh210 2015-12-15
  • 打赏
  • 举报
回复
求告知注册方法,尽量详细点,真的是很迷
缘中人 2015-12-15
  • 打赏
  • 举报
回复
.dll是com组件, 先注册 regsvr32 dllName.dll 然后调用方法参考 http://blog.csdn.net/haijun286972766/article/details/6278064
fxh210 2015-12-15
  • 打赏
  • 举报
回复
按照3楼的方法,报错The OLE control does not support self-registration
我不懂电脑 2015-12-15
  • 打赏
  • 举报
回复
在bcb的component菜单点导入com或则导入activex组件加入ide,然后就和其他c++ builder组件一样用了。

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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