
delphi如何调用c++ DLL中的结构体指针
C++写了个smdll.dll请问如何在delphi中调用dll中的结构体,并返回其内容smdll.dllC代码如下typedefstructtagPackage{cha...
C++ 写了个smdll.dll 请问如何在delphi中调用dll中的结构体,并返回其内容
smdll.dll C代码如下
typedef struct tagPackage
{
char strVarName[64];
int nInt;
float f;
DWORD dw;
double dl1;
}TP;
extern "C" __declspec(dllexport) int GetString(char *str)
{
strcpy(str, "abc");
return 0;
}
extern "C" __declspec(dllexport) int GetPacket(void *pstruct1)
{
pstruct1 = new TP();
TP *p = (TP*)pstruct1;
strcpy(p->strVarName,"aaa");
p->nInt = 123;
p->f = 3.45f;
p->dw = 0xffff;
return 0;
}
我在delphi中做了如下声明
const
Smdll='Smdll.dll';
type
PTtagPackage=^TtagPackage;
TtagPackage= record
strvarname:array[0..63] of char;
nint:integer;
f:Single;
dw:longint;
dl1:double;
end;
// 导出函数声明
function GetPacket(pstruct1:pointer):integer;stdcall;external Smdll;
function GetString(str:pchar):integer;stdcall;external Smdll;
请问高手我的DELPHI声明是否正确,程序中应如何调用DLL取得该结构体的值?
本人新手,希望能给出具体代码,十分感激!!!!
delphi 声明 c++写得代码时,数据类型转换是如何定义的呢? 展开
smdll.dll C代码如下
typedef struct tagPackage
{
char strVarName[64];
int nInt;
float f;
DWORD dw;
double dl1;
}TP;
extern "C" __declspec(dllexport) int GetString(char *str)
{
strcpy(str, "abc");
return 0;
}
extern "C" __declspec(dllexport) int GetPacket(void *pstruct1)
{
pstruct1 = new TP();
TP *p = (TP*)pstruct1;
strcpy(p->strVarName,"aaa");
p->nInt = 123;
p->f = 3.45f;
p->dw = 0xffff;
return 0;
}
我在delphi中做了如下声明
const
Smdll='Smdll.dll';
type
PTtagPackage=^TtagPackage;
TtagPackage= record
strvarname:array[0..63] of char;
nint:integer;
f:Single;
dw:longint;
dl1:double;
end;
// 导出函数声明
function GetPacket(pstruct1:pointer):integer;stdcall;external Smdll;
function GetString(str:pchar):integer;stdcall;external Smdll;
请问高手我的DELPHI声明是否正确,程序中应如何调用DLL取得该结构体的值?
本人新手,希望能给出具体代码,十分感激!!!!
delphi 声明 c++写得代码时,数据类型转换是如何定义的呢? 展开
2个回答
展开全部
type
TABC
=
packed
record
m_puser:
LPVOID;
cSaa:
BYTE;
end;
TPABC
=
@TABC;
function
myinid(hWnd:HWND;
cSaa:BYTE):TPABC;
这样就OK了
我假设你的DLL_API定义为
__declspec(dllexport)
function
TABC
=
packed
record
m_puser:
LPVOID;
cSaa:
BYTE;
end;
TPABC
=
@TABC;
function
myinid(hWnd:HWND;
cSaa:BYTE):TPABC;
这样就OK了
我假设你的DLL_API定义为
__declspec(dllexport)
function
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回头一想 这样简单点
我这边使用lazarus的 公司不让装盗版 没法装delphi 不知道一样不一样
function GetPacket(pPacket:PTtagPackage):integer;cdecl;external Smdll;
function GetString(pStr:PChar):integer;cdecl;external Smdll;
procedure TForm1.Button1Click(Sender: TObject);
var
TagPkg : TtagPackage;
StrInfo : Array[0..4] of Char;
begin
GetPacket(@TagPkg);
GetString(@StrInfo[0]);
ShowMessage(TagPkg.strvarname);
ShowMessage(StrInfo);
end;
另外
DLL_API int GetPacket(pTP p)
{
strcpy(p->strVarName,"aaa");
p->nInt = 123;
p->f = 3.45f;
p->dw = 0xffff;
return 0;
}
我这边使用lazarus的 公司不让装盗版 没法装delphi 不知道一样不一样
function GetPacket(pPacket:PTtagPackage):integer;cdecl;external Smdll;
function GetString(pStr:PChar):integer;cdecl;external Smdll;
procedure TForm1.Button1Click(Sender: TObject);
var
TagPkg : TtagPackage;
StrInfo : Array[0..4] of Char;
begin
GetPacket(@TagPkg);
GetString(@StrInfo[0]);
ShowMessage(TagPkg.strvarname);
ShowMessage(StrInfo);
end;
另外
DLL_API int GetPacket(pTP p)
{
strcpy(p->strVarName,"aaa");
p->nInt = 123;
p->f = 3.45f;
p->dw = 0xffff;
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询