cpp

2013-09-16 3 views
1

에 대한 네임 스페이스가없는 dll 생성 현재 현재 cpp-DLL에 쓰고 있습니다. Afc 나는 다른 cpp 프로그램이 그것들을 사용하기를 원한다면 클래스와 네임 스페이스에 함수를 넣어야한다. 하지만 난 너무 Labview와 DLL을 사용하고 싶습니다. Labview는 함수가 비어있는 경우에만 함수를 인식합니다. 네임 스페이스 나 클래스에서 이 DLL을 어떻게 구현할 수 있습니까? 지금은 #define 변수를 설정했습니다. 이 변수가 설정되면 함수는 네임 스페이스와 클래스로 묶여 있습니다. 그렇지 않은 경우에는 자유입니다.하지만 두 가지를 모두 컴파일해야하고 두 개의 별도 DLL 파일이 필요합니다. 그렇다면 두 응용 프로그램에 대해 하나의 DLL 파일 만 필요하면 어떻게해야합니까? (제발 함수를 두 번 쓰지 말라. 행정 비용은 더 나쁘다. 나는 이것을 전에 시도했다.) 또는 네임 스페이스를 사용하지 않을 때 LoadLibrary()를 통해 DLL을 호출하면됩니까?
대단히 감사합니다!cpp

+1

DLL을 다른 C++ 프로젝트에서 사용할 수 있도록하려면 클래스 나 네임 스페이스를 사용할 필요가 없습니다. 그 아이디어를 어디서 얻었습니까? 해야 할 일은 DLL 함수를 무조건적으로 자유 함수로 내보내는 것입니다. 그리고 원하는 경우 C++ 컴파일러에 대해 별도의 래퍼 클래스를 제공하십시오. 32 비트 및 64 비트 용으로 컴파일하지 않는 한 1 개의 DLL 만 필요합니다. –

+0

http://msdn.microsoft.com/de-de/library/ms235636.aspx 여기에서 –

+0

@arc_lupus 여기에 .dll에 ** 클래스 **를 추가하는 방법이 설명되어 있습니다. 수업이 필요하지 않다면 수업을 추가하지 마십시오. 그리고 단순히'extern "C"'를 사용하여 기호를 내 보냅니다. 또한 [C 또는 C++ 언어 실행 가능 파일에서 사용할 C 함수 내보내기] (http://msdn.microsoft.com/en-us/library/ys435b3s.aspx)를 읽으십시오. – IInspectable

답변

0

Afaik 다른 cpp 프로그램에서 사용하려는 경우이 함수를 클래스와 네임 스페이스에 넣어야합니다.

이것은 일반적으로 잘못되었습니다. 이 작업을 전혀 수행 할 필요가 없습니다. 반대로, DLL은 원래 C 함수의 라이브러리로 도입되었습니다. C++은 네임 스페이스/클래스와 매개 변수 유형을 나타 내기 위해 변형 된 이름을 사용합니다. 이에 대한 표준은 없습니다. 다른 컴파일러는 자체 구성표를 사용합니다.

은 요약하면 :

당신이 당신의 DLL에서 간단한 C 함수를 내보내는 경우
  • 이 항상 작동합니다.
  • 클래스 또는 뭔가를 네임 스페이스에서 내보내는 경우 컴파일러와 동일한 버전으로 다른 .exe/.dll을 컴파일하면 확실히 작동합니다. 그렇지 않은 경우 - 이것은 다릅니다.

에 관한 LoadLibrary : 당신이 당신의 과정의 시작 부분에이 DLL을로드하지 않을 때 DLL의 이름이나 앞서이 DLL에서 함수의 이름을 모르거나하지 않습니다 때 사용한다 . 그렇지 않으면 (단순한 경우) 해당 DLL에 대한 실행 파일을 implib과 링크하십시오. 이것은 간단한 c-function에 완벽하게 작동합니다. 어떤 이유로 든 직접 연결이 좋지 않은 경우 LoadLibrary을 사용해야합니다.

+1

DLL에서 C++ 클래스를 내보내는 것은 매우 불안정합니다. 일반적으로 그것이 보장 될 수있는 유일한 시간은 실제로 필요하지 않은 시간입니다 (정적 라이브러리를 사용하거나 프로젝트에 소스 파일을 추가하는 것). http://stackoverflow.com/questions/12314101/creating-c-dll-without-static-methods/12314276#12314276 – tenfour

+0

LoadLibrary를 사용할 때 다음과 같습니다. 1. DLL을로드하지 않는 옵션을 원하거나 2. 귀하는 도서관 검색 경로에 그 존재를 보장 할 입장이 아닙니다. –