vc dll中如下定义:
struct result{
char mess[100];
int number;
bool flag;
char variable[10];
double value;
char ele_result[250];
};#define DllExport _declspec(dllexport)
extern "C" DllExport struct result engine(char *,char *);delphi调用程序中如下:
type
result = record
mess:string[100];
number:integer;
flag:Boolean;
variable:string[10];
value:double;
ele_result:string[250];
end;
function engine(v1:pchar;v2:pchar):result;stdcall;
external 'inference.dll';procedure TForm1.Button1Click(Sender: TObject);
var
res:result;
begin
res := engine('pollution.dat','nox=200 and so2=103 and tsp=115');
Series1.Add(res.value,FloatToStr(res.value),clBlue);
end;
运行后发现返回得到的结构体res中各项参数有问题,但是我跟踪dll文件中返回
结构体各项发现dll中是正确的。
譬如说第一项:mess.
如果dll函数运行成功的话,mess将为'well done'.但是delphi中返回
结构体res.mess得到的却是'ell done';
而第五项value返回得到的是正确的。最后一项则是字符串尾部部分是正确的,前部分
则会是乱七八糟的代码。我想这可能是因为delphi 与 vc编译器对结构体编译的处理不同引起的吧?!
不知道如何处理。
请各位高手帮忙!
struct result{
char mess[100];
int number;
bool flag;
char variable[10];
double value;
char ele_result[250];
};#define DllExport _declspec(dllexport)
extern "C" DllExport struct result engine(char *,char *);delphi调用程序中如下:
type
result = record
mess:string[100];
number:integer;
flag:Boolean;
variable:string[10];
value:double;
ele_result:string[250];
end;
function engine(v1:pchar;v2:pchar):result;stdcall;
external 'inference.dll';procedure TForm1.Button1Click(Sender: TObject);
var
res:result;
begin
res := engine('pollution.dat','nox=200 and so2=103 and tsp=115');
Series1.Add(res.value,FloatToStr(res.value),clBlue);
end;
运行后发现返回得到的结构体res中各项参数有问题,但是我跟踪dll文件中返回
结构体各项发现dll中是正确的。
譬如说第一项:mess.
如果dll函数运行成功的话,mess将为'well done'.但是delphi中返回
结构体res.mess得到的却是'ell done';
而第五项value返回得到的是正确的。最后一项则是字符串尾部部分是正确的,前部分
则会是乱七八糟的代码。我想这可能是因为delphi 与 vc编译器对结构体编译的处理不同引起的吧?!
不知道如何处理。
请各位高手帮忙!
解决方案 »
- 如何对动态创建的窗体编写onResize或onPaint事件
- 如何在客户端把EXCEL导入到SQL
- 数据转换一定要设置一个变量吗?
- intraweb的chart组件支持图形坐标的缩放吗?
- delphi与execl
- 窗体最小化
- delphi怎样编写服务程序-Service Application,编好了怎么安装这个服务以及调试???
- SQL SERVER2000 + Delphi6 的小数问题
- 在paradox的数据库如何做数据库的备份
- 请问如何通过读写注册表将自己的程序自动加到启动程序组中,谢谢!!!!
- 各位数据库高手大哥:ADODataSet数据集的DeleteRecords方法怎么用啊????
- 求救!关于listbox的问题
把string[100],改成array[0..99]of char,应该就可以了
type
result = record
mess:array[0..99]of char;
number:integer;
flag:Boolean;
variable:array[0..9]of char;
value:double;
ele_result:array[0..254]of char;
end;