none
对于C#调用C++写的DLL有几个问题请教 RRS feed

  • 问题

  • 有个小项目要改成C#代码;

    但是其中几个DLL是C++写的;

    例如DLL里有这样一个函数

    typedef  void (*CALLBACK_FUNPRCO ) (LPVOID lpParam);

    int fun(CALLBACK_FUNPRCO proc, LPVOID lpParam);

    参数为一个CWnd对象指针,也就是this;

    在用C#的时候,我该怎么把对象传递进去呢?

    ps:这个this在DLL里没什么用,只是作为一个参数发送到回调函数中;

    2013年12月16日 6:50

答案

  • http://msdn.microsoft.com/en-us/library/aa288468(v = vs.71). aspx # pinvoke_registeringcallback

    非常感谢,我看了下这个网页;发现里面只是调用方式;并没有this指针的传递方法;

    我现在在找怎么把这个this传递进去,再返回到回调函数proc中;

    也就是,原来是传递的MFC的this,现在要改成C#里的某种方法;我对C#不太了解;希望老师能多指导下;


    我可以告诉你,C# 里面没有 this 指针。你说了是 CWnd 对象指针,那么我还可以告诉你,C# 里面也没有 CWnd 这个对象,所以指针就根本无从谈起,你可以看下这篇文章:http://blog.163.com/fengxuedong_fxd/blog/static/719263062011920102930356/

    我猜你应该是创建的 Winform 程序,很幸运,Winform 中也使用 HWND ,你使用 Form.Handle ,这就是 HWND 类型。因此你可能需要修改你的 C++ DLL 的回调函数,使用 HWND 替代 CWnd * 参数。

    再次感谢,我用Form.Handle试试,今天第一次接触C#,很多地方不清楚,项目又急着改.见笑了
    • 已标记为答案 CN_何磊 2013年12月17日 0:44
    2013年12月16日 7:23

全部回复

  • 回调函数是我自己处理的;
    2013年12月16日 6:54
  • http://msdn.microsoft.com/en-us/library/aa288468(v = vs.71). aspx # pinvoke_registeringcallback

    非常感谢,我看了下这个网页;发现里面只是调用方式;并没有this指针的传递方法;

    我现在在找怎么把这个this传递进去,再返回到回调函数proc中;

    也就是,原来是传递的MFC的this,现在要改成C#里的某种方法;我对C#不太了解;希望老师能多指导下;


    2013年12月16日 7:03
  • http://msdn.microsoft.com/en-us/library/aa288468(v = vs.71). aspx # pinvoke_registeringcallback

    非常感谢,我看了下这个网页;发现里面只是调用方式;并没有this指针的传递方法;

    我现在在找怎么把这个this传递进去,再返回到回调函数proc中;

    也就是,原来是传递的MFC的this,现在要改成C#里的某种方法;我对C#不太了解;希望老师能多指导下;


    我可以告诉你,C# 里面没有 this 指针。你说了是 CWnd 对象指针,那么我还可以告诉你,C# 里面也没有 CWnd 这个对象,所以指针就根本无从谈起,你可以看下这篇文章:http://blog.163.com/fengxuedong_fxd/blog/static/719263062011920102930356/

    我猜你应该是创建的 Winform 程序,很幸运,Winform 中也使用 HWND ,你使用 Form.Handle ,这就是 HWND 类型。因此你可能需要修改你的 C++ DLL 的回调函数,使用 HWND 替代 CWnd * 参数。

    2013年12月16日 7:13
  • http://msdn.microsoft.com/en-us/library/aa288468(v = vs.71). aspx # pinvoke_registeringcallback

    非常感谢,我看了下这个网页;发现里面只是调用方式;并没有this指针的传递方法;

    我现在在找怎么把这个this传递进去,再返回到回调函数proc中;

    也就是,原来是传递的MFC的this,现在要改成C#里的某种方法;我对C#不太了解;希望老师能多指导下;


    我可以告诉你,C# 里面没有 this 指针。你说了是 CWnd 对象指针,那么我还可以告诉你,C# 里面也没有 CWnd 这个对象,所以指针就根本无从谈起,你可以看下这篇文章:http://blog.163.com/fengxuedong_fxd/blog/static/719263062011920102930356/

    我猜你应该是创建的 Winform 程序,很幸运,Winform 中也使用 HWND ,你使用 Form.Handle ,这就是 HWND 类型。因此你可能需要修改你的 C++ DLL 的回调函数,使用 HWND 替代 CWnd * 参数。

    再次感谢,我用Form.Handle试试,今天第一次接触C#,很多地方不清楚,项目又急着改.见笑了
    • 已标记为答案 CN_何磊 2013年12月17日 0:44
    2013年12月16日 7:23