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++写得代码时,数据类型转换是如何定义的呢?
展开
 我来答
创作者0WeXx2iUUj
2019-07-13 · TA获得超过4086个赞
知道小有建树答主
回答量:3131
采纳率:28%
帮助的人:412万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
危献e3
推荐于2016-10-08 · TA获得超过2054个赞
知道大有可为答主
回答量:2738
采纳率:0%
帮助的人:2009万
展开全部
回头一想 这样简单点

我这边使用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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式