2017-06-08 4 views
2

これは簡単な質問のようですが、私はその答えをgoogleにすることはできません。私はこのようなインターフェイスを持っているDLLを持っています:vb6のC文字列を使って構造体を渡します。

dllはいくつかの文字列を埋めるでしょう。 VB6からこのインターフェイスを使用するにはどうすればよいですか?たとえば、64文字の長さの固定長文字列を使用するように文字列を初期化するにはどうすればよいですか?文字列のそれぞれが、事前にサイズの変数でなければなりません

Type ResultsType 
    StringLengths As Long 
    ErrorValue As Long 
    SerialNumber As Long 
    Application As Long 
    GSM As Long 
End Type 

Dim testResults As ResultsType

:私はErrorを想定

+0

文字列は簡単で、事前に割り当てる必要があります。しかし、あなたの構造体で 'エラー'の定義は何ですか? – tcarvin

答えて

1

はVBであなたのタイプのように見えるべきであることを意味する32ビット整数として定義され、 -length文字列のように。

Dim strGSM as String 
strGSM = String$(64, 0) 
testResults.GSM = StrPtr(strGSM) 

宣言は次のようになります

Declare Function GetResult Lib "DLLNAME" (ByVal testResults As ResultsType) As Long 

戻り値が上記Error値であろう。 Libフィールドは、DLLがあなたのパスに入っていることを前提としています。そうでなければ、それをさらに修飾することができます。

すべてはエアーコードなので、テストされていないため保証はありません。

+0

あなたが指摘したように、それらを 'String $(64、0)'であらかじめ割り当てる限り、通常のVB6文字列変数をLPTSTRに使うことができます。 VB6はそれらをマーシャリングする方法を知っています。 – tcarvin

+0

@tcarvinはい、LPTSTRの場合、DLLはWide文字列を期待していて、標準のマーシャリングはAnsi(narrowed)BSTRを渡します。私はOPが期待されていると文書化されていなければ実験しなければならないと思う。 –

+0

それは本当です。いずれにしても、開発者はその答えを知る必要があります。実際にはLPSTRのように、VB6はその文字列がUnicodeであると想定されているため、このコードは動作しません。 – tcarvin

関連する問題