현재 메시지 박스 만 표시되는 단순한 관리되지 않는 C++ 메서드가 있습니다. 이에 대한 관리되는 C++ 래퍼를 작성한 후 C# 응용 프로그램에서 참조합니다. C#에서 관리되지 않는 C++로 문자열과 다른 변수를 전달할 수 있어야하지만 다시 C++ 지식이 매우 기본적인 문자열 변환에 문제가 있습니다.C#에서 관리되지 않는 C#로 관리되는 C++ 래퍼 사용
내 최종 목표는 내 새 C# 응용 프로그램 (DLLImport 또는 COM을 사용하지 않음)을 통해 기존의 관리되지 않는 C++ 라이브러리에서 복잡한 기능을 호출 할 수 있지만 진행하기 전에 간단한 예제를 만들려고합니다.
미리 감사드립니다. 당신이 계획하는 경우 사이에 더 광범위한 상호 운용성 일을
using namespace System::Runtime::InteropServices;
namespace ManagedCpp
{
public ref class MessageBox
{
public:
static void Show(String^ message)
{
#if defined(UNICODE) || defined(_UNICODE)
IntPtr intPtr = Marshal::StringToHGlobalUni(message);
#else
IntPtr intPtr = Marshal::StringToHGlobalAnsi(message);
#endif
UnmanagedCpp::MessageBox::Show(static_cast<LPTSTR>(intPtr.ToPointer()));
Marshal::FreeHGlobal(intPtr);
}
};
}
:
namespace UnmanagedCpp
{
class MessageBox
{
public:
static void Show(LPCTSTR lpszMessage)
{
::MessageBoxW(NULL, lpszMessage, L"Message", 0);
}
};
}
당신은 이런 식으로 그것을 포장 수 : 관리되지 않는 C++ 방법을 가정 리치
당신이 시도한 것의 예를 들어 보면 훨씬 좋을 것 같은 괜찮은 질문입니다. –
몇 가지 코드를 포함시킬 수 있습니까? – yms
System :: Runtime :: InteropServices :: Marshal :: StringToHGlobalAnsi (msg) .ToPointer()는 가장 유망한 것으로 보였지만 너무 많은 변형을 시도하여 모두 나열했습니다. 이상적으로 C#의 문자열에서 C++의 LPCTSTR로 가고 싶습니다. 그러나 C++ 지식이 부족하여 무엇이 어떻게 변환 될지 확신 할 수 없습니다. 관리되지 않는 C++ 그대로 유지하기 위해 Managed C++에서 변환이 필요하다고 생각합니다. – RichardE