私はこれを理解しようと多くの時間がかかるので、私はここで助けを得ることができると考えました。このDLL関数をC++/Cから呼び出す方法
[id(1), helpstring("method findFile")] HRESULT findFile(
[in] BSTR fileName,
[out] LONG* someValue
);
がどのように正確に私は宣言し、C++/C#のいずれかから起動しない: は基本的に私は、IDLでこのように宣言DLL機能を持っていますか?
注:正常に機能を呼び出すVB6アプリケーションがあります。宣言は次のとおりです。
Private Declare Function findFile Lib "thedll.dll" (_
ByVal fileName As String, _
ByRef someValueAs Long _
)
コール:
Dim a As String
Dim b As Long
Dim r As long
a = "image.jpg"
b = -1
r = findFile(a, b)
補遺:
私は実行可能ファイルを持っているので、VB6のコードはそのようになっていることを保証することはできません、私だけ何のことを言われました部分がそうであるように、従って多分あなた達は正しい、それは一致しない。私はC++ DLLを作成しましたが、今私は、物事を試し、そのexeに依存しないように、DLLを正常に呼び出すいくつかのコードを自分でまとめなければなりません。 DLL関数の
C++の実装は次のようになります。
STDMETHODIMP CFinder::findFile(BSTR fileName, LONG* someValue)
{
*someValue = 8;
return S_OK;
}
私はやや懐疑的であることです。この関数を(TLBファイルを使用するのではなく) '宣言する 'とすると、1)' fileName'が間違った方法でマーシャリングされるために失敗します2) 'Variant'の戻り値はスタックのアンバランスです(' Long ')。 – GSerg
関数を宣言するC++ソースコードを表示してください。 –
あります。私はATLを使いました。 –