Delphi 调用 c编写的动态链接库,结构体指针作为参数
来源:互联网 发布:苹果手机价格评估软件 编辑:程序博客网 时间:2024/04/25 14:21
折腾了一天终于把 结构体指针作为在delphi和c动态链接库之间函数参数传递的问题彻底解决了,花了一天时间的主要原因是没有领会参数传递的精髓。现在把c代码和delphi代码粘上来,以供后来者学习参考。
delphi程序代码:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
//定义结构体
type TwoDimArray=Record
x,y:Integer;
end;
function test(a,b:pointer;n1:Integer;var n2:Integer):Integer;stdcall;external 'test.dll' name 'test';
type
TForm3 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
a:Array of TwoDimArray;
b:Array of TwoDimArray;
n1,n2:Integer;
begin
setlength(a,3);
setlength(b,3);
n1:=3;
a[0].x:=11;
a[0].y:=12;
a[1].x:=21;
a[1].y:=22;
a[2].x:=31;
a[2].y:=32;
test(a,b,n1,n2);
ShowMessage(inttostr(b[0].x)+' '+inttostr(b[1].y));
end;
end.
c动态链接库代码(编译后的库文件名为test.dll):
typedef struct TwoDimArray{
int x;
int y;
}TwoDimArray;
extern "C" _declspec(dllexport) int test(TwoDimArray *a,TwoDimArray *b,int n1,int *n2)
{
for(int i=0;i<n1;i++){
b[i].x=a[i].x;
b[i].y=a[i].y;
}
*n2=n1;
return 0;
}
需要注意的是delphi中参数前如果加var,那么在c中对应的参数应该定义为指针,比如:在dephi中参数定义为var n:Integer,则在c中对应的应该定义为int *n
转自:http://zjw1777.blog.163.com/blog/static/4786512920122210294871/
- Delphi 调用 c编写的动态链接库,结构体指针作为参数
- python调用dll动态库传入结构体作为参数
- ctypes: 使用python调用C编写的动态链接库
- C和C++编写、调用动态链接库的方法
- Delphi调用C++编写的动态链接库dll的方法
- 结构体、结构指针作为函数参数
- 《IOS_作业C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)
- 使用DELPHI编写动态链接库的例程
- 当用 Python ctypes 模块调用动态链接库,如何传入一个结构体指针
- 结构体变量指针作为函数参数
- 用结构体指针作为函数参数
- 用结构体指针作为函数参数
- 简单Demo:动态调用自己编写的动态链接库
- Java调用C/C++编写的第三方dll动态链接库
- java调用c/c++编写的第三方dll动态链接库
- JNI技术之Java调用C/C++编写的第三方dll-动态链接库
- Java调用C/C++编写的第三方dll动态链接库
- Python与C参数交互---结构体指针作为参数 实例
- 从“史记2013”看百度百科的新媒体态度
- linux的RPM查询命令
- win32 dll简单例子
- Delphi 与 C/C++ 数据类型对照表
- DLL编写教程
- Delphi 调用 c编写的动态链接库,结构体指针作为参数
- POJ 1860 Currency Exchange(最短路 Bellman-Ford)
- 感冒了
- java基础
- Search a 2D matrix
- 多线程中的信号机制--sigwait()函数
- CRM上线之路 走上了CRM实施顾问-第117天上班 -第24周
- (二) 算法分析基础
- 人之初,性本善