2014-12-11 1 views
0

나는 tesseract와 opencv 라이브러리를 사용하는 en C++로 작성된 프로젝트를 가지고있다.en C++로 작성된 프로젝트를 dll 파일로 변환하는 방법은 무엇입니까?

프로젝트는 매개 변수의 고통으로있는 Int 인 개미를 반환 한 기능을 포함하는 int

int image_blanche(string nom_img,double k); 

나는 그것이 다른 .NET 프로젝트에서 사용하는 파일을 dll을로 변환 할 수있는 방법을 내 질문

+0

컴파일하면됩니다. – CoryKramer

+0

예 그리고 오류없이 작동 – user3770614

+0

프로젝트 속성에서 빌드 유형을 dll로 변경하고 빌드하십시오. – user2970916

답변

0
헤더 파일 (예 : "Defines.h")를 포함한 추가

:

#pragma once 
#ifdef COREDLL_EXPORTS 
#define COREDLL_API __declspec(dllexport) 
#else 
#define COREDLL_API __declspec(dllimport) 
#endif 

함수가 다음과 같은 헤더에 정의되어야한다 :

,
#include "Defines.h" 
extern "C" 
{ 
    COREDLL_API int image_blanche(char const* nom_img,double k); 
}; 

... 소스 파일에 구현되었습니다.

해당 프로젝트를 컴파일하여 COREDLL_EXPORTS를 DLL 프로젝트로 정의하고 다른 프로젝트에서 DLL을 사용하십시오.

COREDLL_EXPORTS가 정의 된 DLL을 빌드 할 때 기본적으로 심볼을 생성 (= 내보내기)하고 DLL에 배치합니다. COREDLL_EXPORTS가 정의되지 않은 다른 프로젝트에서 DLL을 사용할 때 DLL에서 기호를 사용/읽는 (= 가져 오기). 여기

는 다음 DLL에서 함수를 호출 할 수있는 방법의 좋은 설명입니다 Dynamic Invoke C++ DLL function in C#

업데이트 : MSalters으로은 제대로 건너 친화적 인 재생 될 때, 고려되어야한다 C 스타일 데이터 유형을 사용하여, 지적 DLL 경계. 대신 문자 배열을 사용하도록 문자열 매개 변수를 변경했습니다.

+0

extern "C"가 무엇을 의미합니까? – user3770614

+0

extern "C"는 C++에서 function-name을 만드는 데 'C'링키지가 있습니다 (컴파일러는 이름을 변경하지 않습니다). –

+1

Downvoted,'extern "C"는'std :: string'을 취하는 함수에 대한 나쁜 생각입니다. 당신은 절대적으로 그곳에 이름이 섞이는 것을 원합니다. name mangling이 링커 에러를 유발할 때, 그것은'std :: string' 클래스의 해석에서 런타임 오류를 거의 확실하게 막았습니다. – MSalters

관련 문제