프로그램을 개발했으며이 프로그램을 다른 회사에서 제조 한 제어 가능한 광원으로 작동 시키려고합니다. 회사에 이메일을 보내고 외부 라이브러리를 DLL로 보내 주기로 동의했습니다.Qt 및 외부 DLL에 연결
나는 Qt는 4.8.1를 사용하여 내 모든 소프트웨어를 개발하고이를 MSVC2008 사용하여 컴파일되었습니다.
제어 가능한 조명 DLL은 Visual Studio 2008에서 컴파일되었으며 은 C++ 또는 C# (제조업체가 확실하지 않음)으로 작성되었습니다. 의 인스턴스를 인스턴스화
using LightName;
추가
- 내 프로젝트에 참조로 DLL을 추가 : 내가 부여 된 모든 DLL을 내가해야한다는 말을하는 텍스트 파일입니다 다음과 같은 객체 :
LightName *ln = new LightName();
- 새로 생성 된 LightName 인스턴스로 turnOn() 함수를 호출합니다.
첫째, 외부 라이브러리에서 개체의 인스턴스를 인스턴스화하는 것이 특히 어렵다는 것을 알게되었습니다. 특히 하드웨어의 단순한 경우에 그렇습니다.
둘째, 다른 회사에서 인터페이스 파일을 제공하지 않았습니다.
내 질문은 : 어떻게 아마도 C++ DLL에 링크와 Qt는 환경에서 인터페이스 헤더 파일을하지 않고이 라이브러리에 중첩 기능을 노출 할 수 있습니까? 거기에 외부 라이브러리에 대한 인터페이스를 만드는가?
나는 이미 다음 QLibrary를 사용하고 시도 : 나는 주어진 된 DLL은 C DLL되지 않았기 때문에
QLibrary myLib("mylib");
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
if (myFunction)
myFunction();
그러나,이 작동하지 않습니다 내가 Qt는 그래서 인터페이스가 없다 해결해야 할 기호에 대한 단서가 없습니다.
dumpbin/EXPORTS 명령을 사용하여 내 DLL에서 내 보낸 모든 정의를 표시하려고 시도했습니다. 불행히도 이것은 아무것도 생산하지 못했습니다. 나는 내가 맹 글링 된 C++을 이런 식으로 얻어서 내 머리글을 만들기 위해 언 스크램블을 할 수 있기를 바랬다.
그러나 나는 그것이 나에게 어떤 함수 정의를 제공하는 어떤 기호를 확인할 수없는 dependency walker (매우 유용한 도구)를 사용하려고 시도했습니다.
externals 라이브러리를 사용하기 위해'QLibrary'를 사용할 것을 권장하지 않습니다. 미리 라이브러리 이름을 모르는 경우에만 필요합니다 (예 : 플러그인을 지원하려는 경우). * .pro 파일을 사용하여 라이브러리를 링크해야한다고 생각합니다. – fasked
네, 그게 다 잘되고 괜찮아요, .pro에서 라이브러리를로드하는 것도 가능합니다. 외부 라이브러리가 QLibrary 또는 .pro에서로드되었는지 여부에 관계없이 C++로 작성된 DLL에 대해 해당 라이브러리 내에서 함수를 호출하려면 어떻게해야합니까? @ fasked – stackunderflow
그들이 헤더를 보내지 않는 이유는 무엇입니까? – cmannett85