请问delphi在编写DLL时要注意什么?

skyxu 2000-03-13 02:24:00
我一个同事在用vb写一个程序要读取一个digital cameral的照片,
结果通过读出的bmp文件用vb的img和pic的控件没法读,说时无效
文件格式,而我用delphi时可以读的,所以我用delphi写一个DLL
读该图片然后进行修改并存入一个新文件,可是不知道为什么,我
写的程序用delphi来调用,没有问题,可是用vc或vb调用的时候它
出现该程序执行了非法操作的对话框,详细资料是程序再0177:00e868b7
的模块bmpdll.dll中导致了无效叶面的错误。
不知道为什么造成此问题,是不是有什么格式的要求?
我在vc和delphi调用DLL方法都是动态载入的,用loadlibrary和
getprocaddress得到函数的!
谢谢!
...全文
169 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
playyuer 2000-03-15
  • 打赏
  • 举报
回复
欢迎访问 http://playyuer.to263.net
VB、PB、Delphi 联合编程

Delphi
Unit1 代码:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlg('This is a Delphi MessageDlg !',mtInformation,[mbOK],0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
self.Caption:='This is a Delphi Modal Form !';
self.Button1.Caption:='This is a Delphi Button !';
end;

end.

==========================
VB call Delphi Dll code:
'一定要声明为 Long,虽然在 Delphi Dll 定义的是 Procedure (过程)
Private Declare Function ShowDelphiFormModal Lib "..\..\Project1.dll" () As Long
Private Sub Command1_Click()
ShowDelphiFormModal
End Sub
==================
PB call Delphi Dll Code:
//'一定要声明为 Long,虽然在 Delphi Dll 定义的是 Procedure (过程)
FUNCTION long ShowDelphiFormModal () LIBRARY "..\..\Project1.dll"
...
ShowDelphiFormModal()
skyxu 2000-03-14
  • 打赏
  • 举报
回复
sorry,已经好了!
确实是用PChar就好了,刚才主要是没有想到在vc中
给字符串赋值的时候竟然吃了一个"\"号!
skyxu 2000-03-14
  • 打赏
  • 举报
回复
如果实在不行的话,我只好通过剪贴班传递参数的!
如果各位曾经做过的,请给我mail一分啊,具体的做法!

mail: sky@sonic.net.cn
skyxu 2000-03-14
  • 打赏
  • 举报
回复
我的确用了string做了参数!
按了你们的要求我把它改成了PChar的类型,可还是错误,
不过它的错误不太一样,这次是说模块bmpdll.dll中导致例外eedfa0eh的!
我在vc定义的参数是用char *来定义有问题吗?
Firing_Sky 2000-03-13
  • 打赏
  • 举报
回复
1。参数传递时使用了Delphi自定义的一些复杂变量,如AnsiString等
2。Delphi的函数没有用stdcall方式来传递
3。传值传递和传址传递的错误
PeterWu 2000-03-13
  • 打赏
  • 举报
回复
我的回答与上面Lin的回答有一点类似,可能是你在用DLL里面的函数时有以String类型作参数,如果是请用其它方法,如改为PCHAR型。这个问题我是一直的心病,我正在想方法解决这个问题。如果你能解决的话请不要忘记Email我一份
Lin 2000-03-13
  • 打赏
  • 举报
回复
是不是Delphi的参数有String类型呢?如果有的话,改成PChar类型。
skyxu 2000-03-13
  • 打赏
  • 举报
回复
看来错误的来源是和参数的传递有关的!
我吧参数取消就没有问题了,一切正常,可是怎么能这样做呢?
我在vc和delhpi里面都明显是用stdcall或cdecl传递参数,可是还是
包错的,是不是在delphi的环境中还是需要加些什么别的设置呢?

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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