以下のような ac# ファイルがあります。
//MyHandler.cs
public **class MyHandler**
{
**Function1(IntPtr handle)**
{....}
Function2(MyImageHandler myImgHandler,int height,int width)
{....}
};
public **class MyImageHandler**
{
FunctionX(string imagePath,int height,int width)
{.....}
};
次のように、ヘッダー ファイルを含む c++/CLI ラッパー dll を使用してラップしています。
//IWrapper
#pragma once
#include<windows.h>
#include <string>
#ifdef MANAGEDWRAPPER_EXPORTS
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#pragma comment(lib,"D:\\MY\\MYY1\\Wrapper\\Debug\\MyFinalLibrary.lib")
#endif
class IWrapper
{
public:
virtual DLLAPI void Function1(HWND handle)=0;
**virtual __stdcall void Function2(MyImageHandler myImageHandler,int width,int height)=0;**
};
** MyImageHandler はマネージド クラスなので、__stdcall を介してエクスポートしています。これを行うのは正しいですか? ** これで、上記のヘッダー ファイルを実装するヘッダー ファイルと、次のような cpp ファイルがあります::
#include "Wrapper.h"
#include "IWrapper.h"
#include<vcclr.h>
#include <windows.h>
Function1(HWND handle)
{....}
Function2(MyImageHandler myImgHandler,int height,int weight)
{
//Here I need to typecast the MyImageHandler type to a managed handle
}