关于delphi7调用VC里的dll

萤火虫不高飞 2015-08-19 04:14:43

unit Unitdll2;

interface

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

type
TForm1 = class(TForm)
btn1: TButton;
rxrchdt1: TRxRichEdit;
rxrchdt2: TRxRichEdit;
btn2: TButton;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
end;

var
Form1: TForm1;
testint: Integer;

function Dbvt_JpegCreateCamera(hCamera: Cardinal): Cardinal; stdcall; external 'E:\代码\testdll2\gffx.dll';

function Dbvt_JpegConnectDataCamera(hCamera: Cardinal; szIP: string): Boolean; stdcall; external 'E:\代码\testdll2\gffx.dll';

implementation

{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
hd, hr: Cardinal;
begin
hd := FindWindow(nil, 'Form1');
rxrchdt1.Lines.Add(IntToStr(hd));
hr := Dbvt_JpegCreateCamera(hd);
rxrchdt2.Lines.Add(IntToStr(hr));
end;

//function TForm1.Dbvt_JpegCreateCamera(hCamera: Cardinal): Cardinal; stdcall;
//begin
//
//end;
//
//function TForm1.Dbvt_JpegConnectDataCamera(hCamera: Cardinal; szIP: string): Boolean; stdcall;
//begin
//
//end;

procedure TForm1.btn2Click(Sender: TObject);
var
hd: Cardinal;
br: Boolean;
// szi:Integer;
begin
hd := FindWindow(nil, 'Form1');
rxrchdt1.Lines.Add(IntToStr(hd));
br := False;
// br := Dbvt_JpegConnectDataCamera(hd, '192.168.8.61');
// if br then
// rxrchdt2.Lines.Add('true')
// else
// rxrchdt2.Lines.Add('false');
end;

initialization
testint := LoadLibrary('E:\代码\testdll2\gffx.dll');
if testint = 0 then
Exit;
// @Dbvt_JpegCreateCamera := GetProcAddress(testint,'Dbvt_JpegCreateCamera');
// @Dbvt_JpegConnectDataCamera := GetProcAddress(testint,'Dbvt_JpegConnectDataCamera');

finalization
FreeLibrary(testint);

end.


在调用这里有点晕,vc里函数说明为
(1)extern "C" TESTDLL_API HWND __stdcall Dbvt_JpegCreateCamera(HWND hCamera);
函数说明:创建jpeg接收的句柄,初始化结构体。
参数 HWND hCamera 这个参数是把创建的句柄传给这个函数,防止多次连接没有释放。
返回值:创建的新句柄。

(2)extern "C" TESTDLL_API BOOL __stdcall Dbvt_JpegConnectDataCamera(HWND hCamera,const char *szIP);
函数说明:创建jpeg接收的网络线程
参数:
HWND hCamera 创建的句柄
const char *szIP 相机ip地址
返回值:True是成功。

看了很多方法,现报 无法定位程序输入点,求大神解决
...全文
721 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
武稀松 2015-08-24
  • 打赏
  • 举报
回复
另外VC有个不知道是bug还是特性,extern "C"和__stdcall不能同时在一个函数上用,同时用的话会有一个是无效的。 一半调用约定__stdcall在函数声明的时候用。函数名保持不变可以在def文件里面加约束。
SVIP_ 2015-08-20
  • 打赏
  • 举报
回复
Dbvt_JpegConnectDataCamera和Dbvt_JpegCreateCamera 没公布出来吗

用DLL查看器只能看见以下4个函数
萤火虫不高飞 2015-08-20
  • 打赏
  • 举报
回复
引用 3 楼 doorsky123 的回复:
把dll发出来 我看看

不知道怎么上传,只能放在下载页了
http://download.csdn.net/detail/hnj19900121/9026929
SVIP_ 2015-08-20
  • 打赏
  • 举报
回复
把dll发出来 我看看
萤火虫不高飞 2015-08-20
  • 打赏
  • 举报
回复
这几个函数调的到了,应该是给我文档有问题。。。
萤火虫不高飞 2015-08-20
  • 打赏
  • 举报
回复
引用 5 楼 doorsky123 的回复:
Dbvt_JpegConnectDataCamera和Dbvt_JpegCreateCamera 没公布出来吗

用DLL查看器只能看见以下4个函数

好像是,我也下了来看,不过直接用delphi7打开dll会出现不同的函数的?

萤火虫不高飞 2015-08-19
  • 打赏
  • 举报
回复
引用 1 楼 doorsky123 的回复:
1. 本来此类声明就是静态调用dll了, 无需动态LoadLibrary function Dbvt_JpegConnectDataCamera(hCamera: Cardinal; szIP: string): Boolean; stdcall; external 'gffx.dll'; 2. szIP: string 改成 szIP: pchar
1是之前试了很多方法,所以有些忘了改过来了,2换了好像也差不多吧,char*好像可以用string 注释了 动态 结果还是无法定位程序输入点 ,好像这个函数不在dll上似的
SVIP_ 2015-08-19
  • 打赏
  • 举报
回复
1. 本来此类声明就是静态调用dll了, 无需动态LoadLibrary function Dbvt_JpegConnectDataCamera(hCamera: Cardinal; szIP: string): Boolean; stdcall; external 'gffx.dll'; 2. szIP: string 改成 szIP: pchar

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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