vc++编写的dll存在如下声明,如何使用delphi声明
struct SHLSegWord
{
char *s_szWord; //字符串
DWORD s_dwPOS; //词性标志
float s_fWeight ;//关键词权重,如果不是关键词,权重为0 SHLSegWord()
{
Reset();
};
void Reset()
{
s_szWord = NULL ;
s_dwPOS = 0 ;
s_fWeight = 0;
};
};
struct SHLSegWord
{
char *s_szWord; //字符串
DWORD s_dwPOS; //词性标志
float s_fWeight ;//关键词权重,如果不是关键词,权重为0 SHLSegWord()
{
Reset();
};
void Reset()
{
s_szWord = NULL ;
s_dwPOS = 0 ;
s_fWeight = 0;
};
};
调用静态载入 1 客户端函数声名 :1) 大小写敏感。 2) 与 DLL 中的声明一样。 如 : showform(form:Tform);Far;external'yproject_dll.dll';3) 调用时传过去的参数类型最好也与 windows c++ 一样。 4) 调用时 DLL 必须在 windows 搜索路径中 ,顺序是 : 当前目录 ;Path 路径 ;windows;widows\system;windows\ssystem32;
调用动态载入 1 建立一种过程类型 [ 如果你对过程类型的变量只是一个指针的本质清楚的话 ,你就知道是怎么回事了 ] 。如 :type mypointer=procedure(form:Tform);Far;external;var Hinst:Thandle; showform:mypointer;begin Hinst:=loadlibrary('yproject_dll');//Load 一个 Dll,按文件名找。 showform:=getprocaddress(Hinst,'showform');// 按函数名找 ,大小写敏感。如果你知道自动化对象的本质就清楚了。 showform(application.mainform);// 找到函数入口指针就调用。 Freelibrary(Hinst);end;
public
s_szWord:pChar;
s_dwPos:DWORD;
s_fWeight:real; constructor Create;
procedure Reset;
end;constructor SHLSegWord.Create;
begin
inherited Create;
Reset;
end;procedure SHLSegWord.Reset;
begin
s_szWord:=nil;
s_dwPos:=0;
s_fWeight:=0;
end;
调用函数如下
function HLGetWordAt(handle:THandle;index:integer):TSHLSegWord ;cdecl;external 'Split.dll' name 'HLGetWordAt';
但是返回值TSHLSegWord.s_szWord为空字符串,如何处理?
我原来就是使用结构,还是为空。