2012-02-22 7 views
4

C++ 응용 프로그램에 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++ file.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

QUERYSEGMENTATION_API *는 C++ 프로젝트에서 __declspec (dllexport)로 정의되어 있으며 Dependency Walker에서 MyApplication.dll을 열 때 내 보낸 함수를 볼 수 있습니까 (depends.exe는 확실하지 않은 경우를 위해 Visual Studio 도구입니다))? – 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

관련 문제