2011-04-30 5 views
1

C++ DLL에서 문자열 매개 변수가있는 WPF 응용 프로그램에서 함수를 호출하는 방법은 무엇입니까? "DLLImport"가 아닌 "Add References"를 통해 DLL을 추가합니다.dll에 문자열 전달

모든 문제는 C#이 'char *'가 아닌 'sbyte *'매개 변수를 사용하여 기능을 제안합니다. 'int'매개 변수가있는 함수는 완벽하게 작동합니다. ++ dll을 C에서

내 기능 :

public ref class OpenGLHwnd : public HwndHost 
{ 
public: 
    void myFunc(char* name) 
    { 
     // some code 
    } 

C# 코드 :

HwndHost host = new WPFOpenGLLib.OpenGLHwnd(); 
HWNDPlaceholder.Child = host; 
(HWNDPlaceholder.Child as WPFOpenGLLib.OpenGLHwnd).myFunc("aaaa"); 

MYFUNC가 아니라 '숯불 *' '* sbyte을'parametr를 원하는 여기

는 코드입니다. 왜?

또는 말해, 문자열을 변환하는 방법 C 이후 *

답변

3

을 sbyte하는주십시오 ++ DLL은 분명히 .NET 어셈블리 (ref class, 즉, C++/CLI가), 당신은 단지 .NET String와 같은 문자열을 전달할 수 있습니다 :

#include <msclr/marshal.h> 
using namespace msclr::interop; 

public ref class OpenGLHwnd : public HwndHost 
{ 
public: 
    void myFunc(System::String^ name) 
    { 
     marshal_context^ context = gcnew marshal_context(); 
     const char* ptr = context->marshal_as<const char*>(name); 
     puts(ptr); 
     delete context; 
    } 
관련 문제