5,388
社区成员
发帖
与我相关
我的任务
分享
cvGetSize3(SIZE p)
这样的代码,参数 p 是值参,在函数内修改是无法返回的。extern "C" __declspec(dllexport) SIZE __cdecl cvGetSize3(SIZE p)
function cvGetSize3(s: SIZE): SIZE; cdecl; external 'test2.dll';
extern "C" __declspec(dllexport) SIZE __cdecl cvGetSize3(SIZE p)
{
SIZE sz = {0};
sz.cx = sizeof(sz);
sz.cy = 200;
p.cx = 1000;
return sz; //返回SIZE.
}
extern "C" __declspec(dllexport) long __cdecl NewcvGetSize3(SIZE *p)
{
(*p).cx = sizeof(p);
(*p).cy = 200;
return 0; //返回SIZE.
}
function NewcvGetSize3(var s: SIZE): LongInt; cdecl; external 'test1.dll';
extern "C" __declspec(dllexport) long __cdecl NewcvGetSize3Call(SIZE *p)
{
SIZE sz = {0};
HINSTANCE hInst = NULL;
typedef SIZE (__cdecl *FUNcvGetSize3)(SIZE p);
FUNcvGetSize3 funGetSize3;
hInst = LoadLibrary(_T("test2.dll"));
if (!hInst)
return -1;
funGetSize3 = (FUNcvGetSize3)GetProcAddress(hInst,"cvGetSize3");
if (!funGetSize3)
return -1;
*p = funGetSize3(sz);
FreeLibrary(hInst);
return 12345; //返回SIZE.
}
function NewcvGetSize3Call(var s: SIZE): LongInt; cdecl; external 'test1.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
x: SIZE;
begin
inherited;
X.cx := 1;
x.cy := 2;
NewcvGetSize3Call(x);
showmessage(Format('sz.x: %d, %d', [x.cx, x.cy]));
end;