delphi如何使用bcb生成的dll,有解決問題者,200分相送


bcb的dll我只能用在bcb中,delphi的dll我也只能用在delphi中,
在網上查了很多資料,按其方法仍不成功,請各位大蝦講一下應注意
哪些問題,如果誰有這樣的例子,能不能給我發一個,
我的email: ylm163net@163.net

25 个解决方案

#1


up

#2


幫俺推推,也有分送

#3


up一下先,然后回答:
bcb里編寫的dll在delphi里也可以調用,你是不是沒有export,或者在調用程序里沒有聲明函數?在bcb里調用成功嗎?

#4


函數申明要一樣就可以了,另外最好不要用String作為參數、返回值等。
你把你的貼出來我們看看就行了,很簡單的。

#5


不會吧,我 用BCB做的DLL可以在VB中用呢

#6


把函數申明貼出來吧,不然 大家也沒辦法啊

#7


好,我就貼出來,請等一會兒,我整理一下

#8


bcb一端的dll代碼,很簡單,就是顯示一個Form
unit2.h
----------------------------------
void __export _cdecl DoTest(void);
class TForm2 : public TForm
{
__published: // IDE-managed Components
  TLabel *Label1;
  void __fastcall FormShow(TObject *Sender);
private: // User declarations
public: // User declarations
  __fastcall TForm2(TComponent* Owner);
};

unit2.cpp
---------------------------
void DoTest(void)
{
Form2=new TForm2(NULL);
Form2->ShowModal();
delete Form2;
}


delphi一端的調用代碼
--------------------
implementation

{$R *.DFM}
procedure DoTest;cdecl;external 'dlltest.dll';


procedure TForm1.Button1Click(Sender: TObject);
begin
DoTest;
end;

end.


也很簡單,編譯可以通過,運行時報告地址錯誤

#9


up

#10


up

#11


幫俺看看吧

#12


真的沒人肯幫忙嗎?

#13


真的沒人肯幫忙嗎? 
拿就幫俺抬抬吧

#14


印象中:
好像Pascal與C的參數出入棧方式相反,自己寫Dll的話可能要用到PASCAL關鍵字,你可查查相關資料,從出錯提示上看也應是這個問題。
具體我忘了,好像PASCAL中函數參數入棧為先右后左,C為從左到右

#15


不存在棧的問題,兩邊都已聲明為cdecl了,到底怎么回事

#16


up

#17


先定義函數
procedure Dotest;cdecl;
在implementation中實現
procedure DoTest;external 'dlltest' name 'DoTest';
這樣寫試試

#18


也不行

#19


放你娘的狗屁,不要在我的貼子后面瞎跟

#20


看來是有些奇怪,不過我沒有BCB,沒法試。
先讓DoTest什么都不做試試有沒有問題

#21


什么都不做也有問題

#22


是不是出現地址錯誤啊,用如下聲明試試,我曾經這樣使用過:
void __export _stdcall DoTest(void);

#23


我剛上班,公司沒有文檔資料,沒有閑人指教,只有大串的FORM(畫出來的),我想也該沒有問題的,但它偏偏用的就是不同一般的DLL,我算是看懂了,主要是利用消息返回句柄來實現,函數是公司自己寫的。返回的格式是 函數名(自定義的句柄,“某某。DLL”,窗口的消息)

#24


窗口的消息是要自己定義的,返回窗口名就可以了

#25


我試了我所能夠想到的所有注意事項,仍然不行,
我把dll做成進程內自動化服務器,一切OK,
謝謝大家出了這么多力,結賬

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: