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 联系我们: