1
나는 다음과 같은 네이티브 C 내 C++/CLI 래퍼를 완료하고
++ 클래스 :는 C++/CLI 래퍼 - C++ 단독 인스턴스
이#ifndef __TV3DENGINE_H__
#define __TV3DENGINE_H__
#pragma once
#include "TV3DMoteur.h"
#include "Input.h"
#include "Area.h"
#include <vcclr.h>
class Engine3D
{
public:
CLTV3DMoteur* clTV3D;
CLInput* clInput;
CLArea* clArea;
CLGlobalVar * clGlobalVar;
Engine3D();
~Engine3D();
void Setup(HWND TVScreenHWND, string PathString);
void UpdateLoop();
void Cleanup();
bool AppStillIdle();
CLTV3DMoteur* GetTV3D();
CLInput* GetInput();
CLArea* GetArea();
CLGlobalVar * GetGlobalVar();
};
#endif
Engine3D의 실제 생성자는 다음과 같습니다
Engine3D::Engine3D()
{
clTV3D = CLTV3DMoteur::getInstance();
clInput = CLInput::getInstance();
clArea = CLArea::getInstance();
clGlobalVar = CLGlobalVar::getInstance();
}
이
#ifndef __WRAPPER_H__
#define __WRAPPER_H__
#pragma once
#include "TV3DEngine.h"
#include <msclr\marshal_cppstd.h>
public ref class Engine3DWrapper {
Engine3D* m_nativeClass;
public:
Engine3DWrapper() { m_nativeClass = new Engine3D(); }
~Engine3DWrapper() { delete m_nativeClass; }
void Setup(System::IntPtr tvscreen, System::String^ AppPath) {
System::String^ managedPath = AppPath;
m_nativeClass->Setup((HWND)tvscreen.ToInt32(), msclr::interop::marshal_as<std::string>(managedPath));
}
void UpdateLoop() {
m_nativeClass->UpdateLoop();
}
void Cleanup() {
m_nativeClass->Cleanup();
}
bool AppStillIdle() {
return(m_nativeClass->AppStillIdle());
}
protected:
!Engine3DWrapper() { delete m_nativeClass; }
};
#endif
내 문제는 내가 래퍼 modifiy 수있는 방법 그래서, exemp에 액세스 할 수 있습니다 : 여기에 실제 래퍼입니다 le, Engine3DWrapper-> clGlobalVar-> BLABLABLA() 여기서 BLABLABLA는 CLGlobalVar C++ 싱글 톤에 정의 된 모든 다른 메소드입니까?
property String ^Name
{
String ^get()
{
return gcnew String(_stu->getName());
}
}
을하지만 정의 된 형식을 반환 할 필요가 없습니다 때문에 그 수없는 것 같다
나는이 기술을 통해 시도했다.
귀하의 도움에 감사드립니다.
'Engine3DWrapper'에서'm_nativeClass-> GetGlobalVar()'를 반환하는 새 멤버 함수를 만들지 않겠습니까? (또는 초기화 후'GetGlobalVar()'의 값을 저장하는'Engine3DWrapper' 내에'clGlobalVar'라는 새로운 멤버 변수를 만들 수 있습니다. – Rufflewind
이것을 처리 할 수있는 몇 가지 방법이 있습니다. 당신은 다른 모델에 물건을 건네고 있습니다. 한 가지 방법은 자식 클래스를 삭제하지 않는 또 다른 래퍼가 될 "Handle"형식 클래스입니다. 또 다른 방법은 C++을 가비지 수집 소유권 (공유 포인터 사용)으로 옮기는 것입니다. – IdeaHat
@Rufflewind : 처음 접근했지만 새로운 멤버 변수를 만들려면 어떤 유형을 사용해야하는지 차단했습니다. – Windrider