DLLのヘッダファイルには、I/OパラメータとしてBSTRデータ型を使用する必要があります。 JNAでマッピングを作成する必要があります。 Iは、例えば、以下を見出した:JNAでのBSTRデータ型のマッピング
class BSTR extends PointerType {
public BSTR() { }
public BSTR(String value) {
super(new Memory(value.length()*2+6).share(4));
getPointer().setInt(-4, value.length()*2);
getPointer().setString(0, value, true);
}
public String toString() {
int length = getPointer().getInt(-4);
char[] data = getPointer().getCharArray(0, length/2);
return new String(data);
}
}
が、コールJNA方法でそれを使用した後、結果が空(=長さが0でないデータです)。関数のI/OパラメータとしてBSTRを使用するための正しいマッピングを作成する方法をお教えください。 BSTRはDLLメソッドへの参照によって渡されないので、結果はまだ空ですが、それは私の想定に過ぎません。マッピングが正しいかもしれないが、メソッド呼び出しで誤って使用されている可能性があります。ご提案いただきありがとうございます。
を与えるので、あなたの
new Memory(..)
瞬間を消えるMemory.share()の呼び出しは、内部クラスを作成しますので、あなたのコードsuper(new Memory(value.length()*2+6).share(4));
は時間の無駄であることを意味しSharedMemoryのインスタンス。元のMemoryオブジェクトへの暗黙の参照を持ちます。したがって、ctorの元の使用方法には何も問題はありません。 – technomageあなたは正しいです! mea culpa – Cerber
それに応じて回答を編集する必要があります。間違ったアサーションは生きている必要はありません... – technomage