• [C#] System::String을 std::string으로 변환2022.03.25 PM 06:02

게시물 주소 FONT글자 작게하기 글자 키우기

일하다가 C# UI로 파일 다이얼로그를 열어서 "경로\파일명.확장자명"을 c++ dll로 전달해서 처리할 일이 있어서


삽질하다가 블로그 및 MSDN에서 얻은 성과입니다.


MSDN 그는 신이야!!!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//
// 파일명.cs [C#]
//
 
WrapperClass wc;  // C++ dll Wrapper 클래스
 
OpenFileDialog fileDialog = new OpenFileDialog();  // 파일 다이얼로그 열기
DialogResult dr = fileDialog.ShowDialog();  
bool result = true;  // 파일명 전달 결과
 
if(dr == DialogResult.OK)  // 파일 다이얼로그 확인 눌렀을 때
  {
    string fileName = fileDialog.Filename;  // 로그파일경로\파일명.확장자
    result = wc.SetFileName(fileName);
    if(!result)
    {
        MessageBox.Show("파일 열기 실패""메시지 박스명", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
  }
}
 
 
//
// 파일명.cpp [C++]
//
 
#include "msclr\"marshal.h"
 
using namespace msclr::interop;
 
bool WrapperClass::SetFileName(String^ _fileName)    // C++ dll Wrapper 클래스 
{
  bool result = true;
  
  marshal_context^ context = gcnew marshal_context();
  const char* tempFileName = context->marshal_as<const char*>(_fileName);  // System::String을 const char*로 변환
  string fileName = tempFileName;    // const char*를 string으로 변환
  delete context;
 
  return result;
}
 
 
 
cs




요약:

marshal_context를 생성하여 System::String을 const char*로 변경후에 string으로 변환하여 해결함


참고사이트:

https://six605.tistory.com/386

https://docs.microsoft.com/en-us/cpp/dotnet/marshal-context-class?view=msvc-170



댓글 : 0 개
친구글 비밀글 댓글 쓰기

user error : Error. B.