VC中的定义:
extern "C" __declspec(dllexport) ConverFont(LPCTSTR pInFile,LPCTSTR pOutFile,DWORD VirtualAddr,LOGFONT* pLogFont,DWORD *pAddr)
我按下面的在delphi中声明,但是传入VC中的参数值是空的或错的。请问要如何声明才是正确的呢?
function ConverFont(pInFile,pOutFile: LPCTSTR; VirtualAddr: DWORD; pLogFont: TLogFont; var pVirturalAddr: integer): Boolean; external 'FontConver.dll';

解决方案 »

  1.   

    刚才又试了下,把VC中的定义改成如下:
    extern "C"  int _stdcall CltSndMsg(int nServiceType,LPCTSTR sPara); delphi中声明改成
    function ConverFont(pInFile,pOutFile: LPCTSTR; VirtualAddr: DWORD; pLogFont: TLogFont; var pVirturalAddr: integer): Boolean; stdcall;external 'FontConver.dll';发现前面三个参数传入是正确的,但pLogFont: TLogFont;传入的值是错的,请问TLogFont类型要如何传入呢?
      

  2.   

    function CONVERFONT(pInFile :LPCTSTR;var pOutFile: CTSTR;VirtualAddr: LongInt;var pLogFont: LogFont;var pAddr: LongInt) : Boolean;调用方式根据VC里的形式,用cdecl; 或者stdcall
      

  3.   

    类TLogFont是VC里的类,delphi里面没有这个类的定义,所以必须delphi添加一份类的声明才行
      

  4.   

    改成这样试试:
    function ConverFont(pInFile, pOutFile: LPCTSTR;  VirtualAddr: DWORD;  var LogFont: TLogFont;  var pVirturalAddr: DWORD): Boolean; stdcall; external 'FontConver.dll';
      

  5.   

    现在其它问题都解决了,就差TLogFont的了,在delphi中如何定义TLogFont,如何给它赋值呢?或者说如何取得一种字体的TLogFont参数值?
      

  6.   

    在Delphi当中TLogFont是一个指针,而在VC当中也需要传入tagLOGFONT的指针,另外注意tagLOGFONTA (ANSI) 和tagLOGFONTW (Unicode)别传错就OK了。
      

  7.   

    unsigned:能否具体说说在delphi中如何取得某种字体的TLogFont参数值?比如说隶书18号?
    因为关于TLogFont,我没接触过,所以都搞不清楚。谢谢。
      

  8.   

    function TFont.GetHandle: HFont;
    var
      LogFont: TLogFont;
    begin
      with FResource^ do
      begin
        if Handle = 0 then
        begin
          FontManager.Lock;
          with LogFont do
          try
            if Handle = 0 then
            begin
              lfHeight := Font.Height;
              lfWidth := 0; { have font mapper choose }
              lfEscapement := Font.Orientation;
              lfOrientation := Font.Orientation;
              if fsBold in Font.Style then
                lfWeight := FW_BOLD
              else
                lfWeight := FW_NORMAL;
              lfItalic := Byte(fsItalic in Font.Style);
              lfUnderline := Byte(fsUnderline in Font.Style);
              lfStrikeOut := Byte(fsStrikeOut in Font.Style);
              if (Font.CharSet = DEFAULT_CHARSET) and
                 (DefFontData.Charset <> DEFAULT_CHARSET) then
                lfCharSet := DefFontData.Charset
              else
                lfCharSet := Byte(Font.Charset);
              if AnsiCompareText(Font.Name, 'Default') = 0 then  // do not localize
                StrPCopy(lfFaceName, DefFontData.Name)
              else
                StrPCopy(lfFaceName, Font.Name);
              if (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
                (GetDefFontCharset = SHIFTJIS_CHARSET) and IsDefaultFont(Font) then
                lfCharSet := SHIFTJIS_CHARSET;
              lfQuality := DEFAULT_QUALITY;
              { Everything else as default }
              { Only True Type fonts support the angles }
              if lfOrientation <> 0 then
                lfOutPrecision := OUT_TT_ONLY_PRECIS
              else
                lfOutPrecision := OUT_DEFAULT_PRECIS;
              lfClipPrecision := CLIP_DEFAULT_PRECIS;
              case Pitch of
                fpVariable: lfPitchAndFamily := VARIABLE_PITCH;
                fpFixed: lfPitchAndFamily := FIXED_PITCH;
              else
                lfPitchAndFamily := DEFAULT_PITCH;
              end;
              Handle := CreateFontIndirect(LogFont);
            end;
          finally
            FontManager.Unlock;
          end;
        end;
        Result := Handle;
      end;
    end;