C# 에서 C++ DLL 불러서 쓰기 #4
4. 멤버 함수 가져오기
C++
#ifdef BOX_EXPORTS
#define BOX_API __declspec(dllexport)
#else
#define BOX_API __declspec(dllimport)
#endif
Class BOX_API Box{
public:
Box();
int setInt(int a);
void setString(char* str);
}
int setInt(int a);
void setString(char* str);
이 멤버 함수들을 가져와서 사용하고 싶다.
참고 : http://tansanc.tistory.com/526?category=772232 [TanSanC]
아래와 같이 사용하고 싶지만
불가능하다
namespace BoxConsoleApplication
{
class Program
{
[DllImport("Box.dll", CallingConvention = CallingConvention.Cdecl)]
static public extern IntPtr CreateCBox();
[DllImport("Box.dll", CallingConvention = CallingConvention.Cdecl)]
static public extern void DisposeCBox(IntPtr pTestClassObject);
unsafe static void Main(string[] args)
{
IntPtr pCBoxClass = CreateCBox(); ;
pCBoxClass.setInt(3);
pCBoxClass.setString("HelloWorld");
DisposeCBox(pCBoxClass );
pCBoxClass = IntPtr.Zero;
}
}
}
pCBoxClass.setInt(3);
pCBoxClass.setString("HelloWorld");
클래스 내부 멤버 변수라 바로 가져올 수는 없다.
사용 할 수 있는 방법은
클래스 생성시와 같이
extern 으로 접근가능 하도록 만들어 주어야 한다.
기본 형태
C++
.h
extern "C" BOX_API int setInt(CBox* pObject, int a);
.cpp
extern "C" BOX_API int setInt(CBox* pObject, int a)
{
if (pObject != NULL)
{
pObject->setInt(a);
}
return -1;
}
이렇게 C++ DLL 내부에서
클래스 객체에 접근하여
객체의 멤버 함수를 호출하여 준다.
void setString(char* str);
'Programming > C#' 카테고리의 다른 글
참조 dll 강력키 생성 방법 (0) | 2018.09.10 |
---|---|
C# 에서 C++ DLL 불러서 쓰기 #5 (0) | 2018.02.15 |
C# 에서 C++ DLL 불러서 쓰기 [도움되는 링크들] (0) | 2018.02.13 |
C# 에서 C++ DLL 불러서 쓰기 #2 (0) | 2018.02.13 |
C# 에서 C++ DLL 불러서 쓰기 #3 (0) | 2018.02.13 |