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;
};
};

解决方案 »

  1.   

    不管是什么语言写的dll,调用的方法都是类似的吧 。下面是一些说明=======
    调用静态载入 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;
      

  2.   

    SHLSegWord=class(TObject)
    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;
      

  3.   

    gzmhero(hihihi):你好!
    调用函数如下 
    function HLGetWordAt(handle:THandle;index:integer):TSHLSegWord ;cdecl;external 'Split.dll' name 'HLGetWordAt';
    但是返回值TSHLSegWord.s_szWord为空字符串,如何处理?
      

  4.   

    Dll函数的返回值改下吧,不要返回类,返回个结构,这样就能在D中调用了。
      

  5.   

    gzmhero(hihihi):你好!
    我原来就是使用结构,还是为空。