무엇을하려하십니까? 내가 BOOST_GRAPH_API를 보았는데, 너 무슨 일이야? 닷넷의 네이티브 C++ 코드를 직접 사용할 수 없으며 반드시 그렇게 할 필요가 없습니다! 그렇게하면 C++ 표준 라이브러리에 모든 가져온 종속성을 컴파일하고 clr을 지원하여 부스트 (!) 할 수 있습니다. ...
적절한 팩토리 메소드와 함께 클래스에 대한 인터페이스를 정의해야합니다.
// imyclass.h
__declspec(dllexport)
IMyClass* CreateInstance();
__declspec(dllexport)
class IMyClass {
public:
virtual int CompareTo(IMyClass*) = 0;
virtual ~IMyClass() {}
};
// myclass.h
#include "imyclass.h"
#include <vector>
class MyClass : public IMyClass {
std::vector<int> mIntVector;
public:
virtual int CompareTo(IMyClass*);
// constructors and access functions go here...
};
// myclass.cpp
#include "myclass.h"
#include <memory>
IMyClass* CreateInstance() {
return new MyClass;
}
// implementations of whatever MyClass should do go here...
는 인터페이스 IMyClass
및 작성자가 DLL, 아무것도 내 보낸 것을 관찰 :이 안전하게 직접 닷넷 프로그램에서 참조 할 수있는 C++/CLI 객체에 의해 수출 포장 할 수있다. C++/CLI 프로젝트에서는 IMyClass
에 대한 포인터를 보유하고 imyclass.h 만 가져 오는 C++/CLI 일회용 래퍼를 정의합니다. imprt 래퍼 만 IMyClass
하고 창조자가 뭔가 아래 그림과 유사하지만, 컴파일러 인 타이틀 생성되는 어떤 순간에 오른쪽 확실하지 종료 자 의미를 얻기 위해주의를 기울여야의 ... :
ref class IMyClassWrapper {
IMyClass* mPtrResource;
public:
int CompareTo(IMyClassWrapper^ pOther) {
return this->mPtrResource->CompareTo(pOther->mPtrResource);
}
IMyClassWrapper() {
mPtrResource = ::CreateInstance();
}
~IMyClassWrapper() {
this->!IMyClassWrapper();
}
protected:
!IMyClassWrapper() {
delete mPtrResource;
mPtrResource = 0;
}
};
인가 #을 # 포함하는 것을 잊었을 가능성이 있습니까? 컴파일러는 어떤 벡터인지 알지 못하는 것 같습니다. –
gnobal
@gnobal, 아니에요. 코드 스 니펫이 업데이트되었습니다. – Graviton
@gnobal, 컴파일 오류가 수정되었습니다. 하지만 지금은 붙어 어떻게 대응하는. 닷넷 코드를 작성 해야할지 모르겠다. 업데이트 된 질문을 참조하십시오. – Graviton