에 대한 네임 스페이스가없는 dll 생성 현재 현재 cpp-DLL에 쓰고 있습니다. Afc 나는 다른 cpp 프로그램이 그것들을 사용하기를 원한다면 클래스와 네임 스페이스에 함수를 넣어야한다. 하지만 난 너무 Labview와 DLL을 사용하고 싶습니다. Labview는 함수가 비어있는 경우에만 함수를 인식합니다. 네임 스페이스 나 클래스에서 이 DLL을 어떻게 구현할 수 있습니까? 지금은 #define 변수를 설정했습니다. 이 변수가 설정되면 함수는 네임 스페이스와 클래스로 묶여 있습니다. 그렇지 않은 경우에는 자유입니다.하지만 두 가지를 모두 컴파일해야하고 두 개의 별도 DLL 파일이 필요합니다. 그렇다면 두 응용 프로그램에 대해 하나의 DLL 파일 만 필요하면 어떻게해야합니까? (제발 함수를 두 번 쓰지 말라. 행정 비용은 더 나쁘다. 나는 이것을 전에 시도했다.) 또는 네임 스페이스를 사용하지 않을 때 LoadLibrary()를 통해 DLL을 호출하면됩니까?
대단히 감사합니다!cpp
cpp
답변
Afaik 다른 cpp 프로그램에서 사용하려는 경우이 함수를 클래스와 네임 스페이스에 넣어야합니다.
이것은 일반적으로 잘못되었습니다. 이 작업을 전혀 수행 할 필요가 없습니다. 반대로, DLL은 원래 C 함수의 라이브러리로 도입되었습니다. C++은 네임 스페이스/클래스와 매개 변수 유형을 나타 내기 위해 변형 된 이름을 사용합니다. 이에 대한 표준은 없습니다. 다른 컴파일러는 자체 구성표를 사용합니다.
은 요약하면 : 당신이 당신의 DLL에서 간단한 C 함수를 내보내는 경우- 이 항상 작동합니다.
- 클래스 또는 뭔가를 네임 스페이스에서 내보내는 경우 컴파일러와 동일한 버전으로 다른 .exe/.dll을 컴파일하면 확실히 작동합니다. 그렇지 않은 경우 - 이것은 다릅니다.
에 관한 LoadLibrary
: 당신이 당신의 과정의 시작 부분에이 DLL을로드하지 않을 때 DLL의 이름이나 앞서이 DLL에서 함수의 이름을 모르거나하지 않습니다 때 사용한다 . 그렇지 않으면 (단순한 경우) 해당 DLL에 대한 실행 파일을 implib과 링크하십시오. 이것은 간단한 c-function에 완벽하게 작동합니다. 어떤 이유로 든 직접 연결이 좋지 않은 경우 LoadLibrary
을 사용해야합니다.
DLL에서 C++ 클래스를 내보내는 것은 매우 불안정합니다. 일반적으로 그것이 보장 될 수있는 유일한 시간은 실제로 필요하지 않은 시간입니다 (정적 라이브러리를 사용하거나 프로젝트에 소스 파일을 추가하는 것). http://stackoverflow.com/questions/12314101/creating-c-dll-without-static-methods/12314276#12314276 – tenfour
LoadLibrary를 사용할 때 다음과 같습니다. 1. DLL을로드하지 않는 옵션을 원하거나 2. 귀하는 도서관 검색 경로에 그 존재를 보장 할 입장이 아닙니다. –
- 1. Cpp #
- 2. CPP
- 3. CPP
- 4. 다른 .cpp 파일의 본문에서 .cpp 파일 컴파일
- 5. zsh make **/*. cpp **/*. cpp ** 오류가 발생하지 않습니다.
- 6. cpp 프로그램에 cpp 헤더 파일을 포함하는 방법
- 7. CPP 오류
- 8. CPP 파일은
- 9. CPP-NETLIB
- 10. select(), cpp
- 11. Visual Studio 2008의 cpp 프로젝트에서 외부 cpp 프로젝트를 사용하는 방법
- 12. 하나의 .cpp 파일에서 다른 .cpp 파일로 문자열 전송하기
- 13. cpp 파일 내에서 cpp 파일을 실행하는 방법은 무엇입니까?
- 14. 클래스에서 (* .cpp) 대신에 (* .cpp) 구조체를 정의 할 수 있습니다.
- 15. CPP 오류 LNK2019 : 확인할 수없는 외부 기호 cpp
- 16. ActiveMQ CPP 라이브러리
- 17. cpp 파일의 함수 순서는
- 18. cpp 코드에서 오류가 발생했습니다.
- 19. (C의 CPP 언어)
- 20. cpp iterator 상속
- 21. Cpp 포인터 및 배열
- 22. 그냥 cpp 파일에 포함시켜야합니다.
- 23. 부스트가없는 yaml-cpp 포함하기 -
- 24. 브레이크 Cpp 루프에 "|"
- 25. cpp 용 Qbasic 인터프리터
- 26. cpp 소켓, 상속 오류
- 27. cpp 파일 위치를 정의하십시오.
- 28. CPP 매크로 내보내기
- 29. 출력용 .cpp 자리 형식
- 30. 이 포인터의 크기는 Cpp
DLL을 다른 C++ 프로젝트에서 사용할 수 있도록하려면 클래스 나 네임 스페이스를 사용할 필요가 없습니다. 그 아이디어를 어디서 얻었습니까? 해야 할 일은 DLL 함수를 무조건적으로 자유 함수로 내보내는 것입니다. 그리고 원하는 경우 C++ 컴파일러에 대해 별도의 래퍼 클래스를 제공하십시오. 32 비트 및 64 비트 용으로 컴파일하지 않는 한 1 개의 DLL 만 필요합니다. –
http://msdn.microsoft.com/de-de/library/ms235636.aspx 여기에서 –
@arc_lupus 여기에 .dll에 ** 클래스 **를 추가하는 방법이 설명되어 있습니다. 수업이 필요하지 않다면 수업을 추가하지 마십시오. 그리고 단순히'extern "C"'를 사용하여 기호를 내 보냅니다. 또한 [C 또는 C++ 언어 실행 가능 파일에서 사용할 C 함수 내보내기] (http://msdn.microsoft.com/en-us/library/ys435b3s.aspx)를 읽으십시오. – IInspectable