2012-02-22 15 views
4

私はC++アプリケーションにパラメータを送信しようとしているC#アプリケーションを持っています。DLL内のエントリポイントを見つけることができません

static class SegmentationFunctions 
{ 
[DllImport("MyApplication.dll", EntryPoint = "fnmain", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] 
     public static extern int fnmain(string search); 
    } 
} 

public partial class MainWindow:Window 
{ 
public MainWindow() 
{ 
InitializeComponent(); 

string search = "test string here"; 
int scommand = SegmentationFunctions.fnmain(search); 
} 

C++ファイル.h

extern "C" QUERYSEGMENTATION_API int fnmain(char query[MAX_Q_LEN]); 

C++ファイル.CPP

:しかし、私は(件名に記載された)エラー

C#アプリケーションを取得しています

extern "C" QUERYSEGMENTATION_API int fnmain(char searchc[MAX_LEN_Q]) { do something... } 
+1

あなたのC++プロジェクトでQUERYSEGMENTATION_API *が__declspec(dllexport)として定義されていますか?また、Dependency WalkerでMyApplication.dllを開くとエクスポートされた関数が表示されます(depends.exeは、 )? – adelphus

答えて

5

Dependency Walkerは、どの機能がDLLから効果的にエクスポートされたかを示すことができます。 fnmainがまったく存在するかどうか、または_fnmainか、名前にC++の装飾があるかどうかを確認できます。

0

デフォルトでは、visual studioはネイティブ出力を管理出力と同じフォルダにコピーしません。

管理されたビルドフォルダにネイティブ出力を手動でコピーして再実行してください。問題がある場合は、C++ビルド設定を変更して、保存先フォルダを管理対象アプリケーションフォルダと同じにする必要があります。 QUERYSEGMENTATION_APIマクロが正しく定義されている限り、あなたのdllは、私は手動でファイルシステムから実行可能ファイルを実行します

「MyApplication.dll」として建設され、実際にある - -

あなたのコードが正しいことを確認すること最新のexeとdllは同じフォルダにあり、失敗した場合はdepends.exeを実行してください。

+0

私はすでに、C#プロジェクトで最新のDLLを取得するためのビルド後のビルドを持っています。 – Cipher

関連する問題