c++ 头文件声明:
extern "C" __declspec(dllexport) bool WINAPI MySkin(HWND hWnd,HBITMAP hBmpScroll);cpp 实现
extern "C" bool WINAPI MySkin(HWND hWnd,HBITMAP hBmpScroll)
{
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
MySkinImp(pWnd,hBmpScroll);
return true;
}C#调用方式:
声明:
[DllImport("dll4net.dll")]
public static extern Boolean MySkin(int hWnd, IntPtr hBmpScroll);调用:
try
{
Bitmap bm = new Bitmap("skin.bmp");
IntPtr ipbm = bm.GetHbitmap();
IntPtr ipTextBoxHandle = this.textBox1.Handle;
MySkin(ipTextBoxHandle.ToInt32(), ipbm);//这句报错
}执行,报错在 System.AccessViolationException 中第一次偶然出现的“myn.exe”类型的异常
请问是传入参数不对吗?该如何传?
extern "C" __declspec(dllexport) bool WINAPI MySkin(HWND hWnd,HBITMAP hBmpScroll);cpp 实现
extern "C" bool WINAPI MySkin(HWND hWnd,HBITMAP hBmpScroll)
{
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
MySkinImp(pWnd,hBmpScroll);
return true;
}C#调用方式:
声明:
[DllImport("dll4net.dll")]
public static extern Boolean MySkin(int hWnd, IntPtr hBmpScroll);调用:
try
{
Bitmap bm = new Bitmap("skin.bmp");
IntPtr ipbm = bm.GetHbitmap();
IntPtr ipTextBoxHandle = this.textBox1.Handle;
MySkin(ipTextBoxHandle.ToInt32(), ipbm);//这句报错
}执行,报错在 System.AccessViolationException 中第一次偶然出现的“myn.exe”类型的异常
请问是传入参数不对吗?该如何传?
public struct HWND__ {
/// int
public int unused;
}[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct HBITMAP__ {
/// int
public int unused;
}public partial class NativeMethods {
/// Return Type: boolean
///hWnd: HWND->HWND__*
///hBmpScroll: HBITMAP->HBITMAP__*
[System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint="MySkin")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.I1)]
public static extern bool MySkin(System.IntPtr hWnd, System.IntPtr hBmpScroll) ;}
另外没有UnmanagedType.I1这个类型.这是为了兼容返回的bool值吗?
如果你还不明白怎么做,我推荐你阅读刚刚出版的新书:《精通.NET互操作P/Invoke,C++Interop和COM Interop》,这本书详细且系统地介绍了.NET互操作的三种主要技术:P/Invoke,C++ Interop和COM Interop,你需要的问题在第2章“数据封送”中能找到解答。
该书的官方网站:
www.interop123.com 豆瓣网信息:
http://www.douban.com/subject/3671497/