delphi调用VC写的DLL时传递类指针参数有关问题
delphi调用VC写的DLL时传递类指针参数问题
在VS中代码为:
//TestClass.h
class stcTest
{
public:
int a;
};
//DLLTEST.CPP
int CDLLTestApp::GetMya(stcTest* ss)
{
return ss->a;
}
//main.cpp
extern "C" __declspec(dllexport) int Getya(stcTest* ss)
{
return theApp.GetMya(ss);
}
delphi中代码:
//DLLTESTUNIT.PAS
stcTest = class
public
a: Integer;
end;
function Getya(var ya: stcTest): Integer;cdecl;
implementation
function Getya;external 'DLLTest.dll';
调用:
var
x: stcTest;
begin
x := stcTest.Create;
x.a := 3;
ShowMessage(IntToStr(x.a));
ShowMessage(IntToStr(Getya(x)));
x.Free;
end;
这里show出来的结果二者不一样。
如果改用record类型结果就一样了。
现在问题是我在使用的DLL有类指针参数,这些类无法改成Record类型,该怎么处理?
------解决方案--------------------
stcTest = class
public
a: Integer;
end;
class改成record,再加一句:
pstcTest=^stcTest;
定义时把变量定义为pstcTest即可
------解决方案--------------------
哦是一个类啊。。c++和DELPHI类有所不同,因此这两个语言之间不能进行类传递
------解决方案--------------------
class stcTest和stcTest = class的大小一样吗?
在VS中代码为:
//TestClass.h
class stcTest
{
public:
int a;
};
//DLLTEST.CPP
int CDLLTestApp::GetMya(stcTest* ss)
{
return ss->a;
}
//main.cpp
extern "C" __declspec(dllexport) int Getya(stcTest* ss)
{
return theApp.GetMya(ss);
}
delphi中代码:
//DLLTESTUNIT.PAS
stcTest = class
public
a: Integer;
end;
function Getya(var ya: stcTest): Integer;cdecl;
implementation
function Getya;external 'DLLTest.dll';
调用:
var
x: stcTest;
begin
x := stcTest.Create;
x.a := 3;
ShowMessage(IntToStr(x.a));
ShowMessage(IntToStr(Getya(x)));
x.Free;
end;
这里show出来的结果二者不一样。
如果改用record类型结果就一样了。
现在问题是我在使用的DLL有类指针参数,这些类无法改成Record类型,该怎么处理?
------解决方案--------------------
stcTest = class
public
a: Integer;
end;
class改成record,再加一句:
pstcTest=^stcTest;
定义时把变量定义为pstcTest即可
------解决方案--------------------
哦是一个类啊。。c++和DELPHI类有所不同,因此这两个语言之间不能进行类传递
------解决方案--------------------
class stcTest和stcTest = class的大小一样吗?