2011-08-02 14 views
3

この単純なテストケースを動作させ、インターネットで手がかりを探すのに何時間も費やしました。EntryPointNotFoundException VB.netでC DLLをロードする

私はVB.netプロジェクトとVC++ DLLプロジェクトを含むVS 10ソリューションを持っています。

json_main.cpp:

#include <Windows.h> 

extern "C" 
{ 
    void testMethod(int* inVal) 
    { 
     *inVal += 5; 
    } 
} 

JSON.def:

LIBRARY JSON 
    DESCRIPTION 'Simple JSON encoder/decoder' 
    EXPORTS 
     testMethod 

そして、私のVB.netコード:

<DllImport("C:/inetpub/wwwroot/facebook/AlumniFinder/Debug/JSON.dll", CallingConvention:=CallingConvention.Cdecl)> _ 
Private Shared Sub testMethod(ByRef inVal As Integer) 

End Sub 
... 

Dim var As Integer = 7 
testMethod(var) 
oLabel.Text = var.ToString 
私は私のDLLプロジェクトで

しかし、私が走ろうとすると、私はEntryPointNotFoundException

私がここで間違っているかもしれないことは誰でも知っていますか? DLLにdumpbin.exeを使用しようとしましたが、使用しているマングリング方式を判断するための関数名がありません。

答えて

3

dumpbin /exportsまたはDependency Walkerを使用して、あなたはそうではないようです。

私の推測では、.defファイルをリンカーに渡すようにビルドを構成していないと思います。このスクリーンショットのようにそれを実行します。

enter image description here

+0

私はちょうどDLLとしてプロジェクトをビルドしました。私は.defファイルの使い方について何も言及していないチュートリアルを読んで、VSがその拡張子を解釈してそれに応じてそれを使用すると仮定しました。 –

+0

'dumpbin/exports JSON dll'私はエクスポートを示す何も表示されません、あなたが私が正しくないと信じるように導く.defファイルが使用されていることを確認する必要があります。どうすればいいですか? –

+0

素晴らしいそれは本当にありがとう! –

0

は(パスなし、とExternalで)これを試してみてください:

<DllImport("JSON.dll", CallingConvention:=CallingConvention.Cdecl)> _ 
Private Shared External Sub testMethod(ByRef inVal As Integer) 

そしてJSON.dllは、出力ディレクトリにあることを確認します(ここで、プログラムはから実行されます)。

関連する問題