0

私は Delphi 2010 で DLL に取り組んでいます。バリアントの配列を受け取るプロシージャをエクスポートします。これらのバリアントのいずれかを取得して文字列に変換できるようにしたいのですが、????? を取得し続けます。

入力変数を変更できません - バリアントの配列でなければなりません。DLL を呼び出すホスト アプリは変更できません。Delphi 2006 で書かれています。

サンプル DLL コード:

Procedure TestArr(ArrUID : array of variant); stdcall;  
var 
  i: integer;  
  s: string;
begin  
  s:= string(String(Arruid[0]));  
  showmessage(s);  
end;  

D2006 を使用すると、私の DLL は正常に動作します。私は使ってみVartoStrました - 運が悪いです。を確認するVarTypeと、 が表示されvarStringます。これを修正する方法はありますか?

4

2 に答える 2

1

ホストアプリケーションがを送信してAnsiStringいて、dllがを期待していUnicodeStringます。
Unicode文字列はDelphi2009で導入されましたが、Delphi 2006には存在しません。修正するにはどうすればよいですか?[未テスト]を試してください:

Procedure TestArr(ArrUID : array of variant); stdcall;  
var 
  i: integer;  
  s: AnsiString;
begin  
  s:= Ansistring(VarToStr(Arruid[0]));  
  showmessage(s);  
end;  

または多分[これもテストされていません]:

Procedure TestArr(ArrUID : array of variant); stdcall;  
var 
  i: integer;  
  s: AnsiString;
begin  
  s:= Ansistring(AnsiString(Arruid[0]));  
  showmessage(s);  
end;  

また、そのような機能VarToStrが受け入れられるかどうかを確認することもできますAnsiStrings(おそらくAnsiStringsユニット内にありますか?)。

于 2011-03-17T02:44:25.100 に答える
0

1/ どのようにVarToStr()関数を呼び出しましたか? VarToString(Arruid[0])?

2/ Delphi2006 アプリケーションは、AnsiString または WideString を DLL に送信しますか? その場合、および (1) が機能しない場合は、AnsiString代わりににキャストしてみてくださいstring

于 2010-03-28T07:05:09.203 に答える