你們好,想請教大神一個問題。我從來沒接觸過c++ builder和c#,但是公司讓我測驗怎么在c++ builder呼叫c#com組建,給了我一個檔案夾,包含.dll和.pdb,其他沒了。組件里的函式就是簡單的加法,讓我在c++ builder呼叫輸出結果。我查了很多網上的資料,但對于c++builder和c#實在不熟,所以。。。還望看在我第二天入職的份上,期待解答。。。
uj5u.com熱心網友回復:
.dll是com組件,先注冊 regsvr32 dllName.dll
然后呼叫方法參考
http://blog.csdn.net/haijun286972766/article/details/6278064
uj5u.com熱心網友回復:
求告知注冊方法,盡量詳細點,真的是很迷uj5u.com熱心網友回復:
在bcb的component選單點匯入com或則匯入activex組件加入ide,然后就和其他c++ builder組件一樣用了。uj5u.com熱心網友回復:
按照3樓的方法,報錯The OLE control does not support self-registrationuj5u.com熱心網友回復:
COM組件是需要注冊的!用regsvr32 XXX.dll去注冊
uj5u.com熱心網友回復:
從樓主的說明來看,這個c# com組件應該是managed dll,不能直接作為一般dll呼叫,也不能用regsvr32注冊,要用.net工具regasm.exe注冊,同時生成一個型別庫.tlb,在C++程式中引入這個型別庫:#import "xxx.tlb" raw_interfaces_only
初始化com:
HRESULT hr = CoInitialize(NULL);
然后建立介面指標,通過借口指標呼叫某個方法,具體要看managed dll中的定義。
uj5u.com熱心網友回復:
您看一下我寫的,上面是.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...");
}
}
我就這樣寫的,還有論壇上一種傻瓜式呼叫,我代碼都看不懂。看您了解這塊,希望詳細為我解答,謝謝謝謝。
uj5u.com熱心網友回復:
給我的是一個TrapControl.dll,然后我把.tlb加入到ActiveX中了,有個IonTrap組件。
uj5u.com熱心網友回復:
這里有一個例子,不過是VC的:https://support.microsoft.com/zh-cn/kb/828736uj5u.com熱心網友回復:
恩,我明天試試,剛下班,謝謝啦轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/87306.html
下一篇:個人銀行賬戶管理基本模塊實作
