none
wpf下实现C++DLL函数调用及事件回调 RRS feed

  • 问题

  • struct IWhiteboard
    {
        virtual long __stdcall Move(const WtRect& source_rect, const WtRect& target_rect) = 0;
        virtual long __stdcall Draw(const WtRect& rect) = 0;
    };

    struct IWhiteboardEvent
    {
        virtual long __stdcall OnMove(const WtRect& source_rect, const WtRect& target_rect) = 0;
        virtual long __stdcall OnUpdate(WtRect& rect, char* buffer, WtStatus flag) = 0;
    };

    long __stdcall CreateWhiteboard(void** whiteboard,void* whiteboardSink);

    long __stdcall ReleaseWhiteboard(void** whiteboard);

    以上是c++dll的接口定义,环境原本是c++的,因而调用c++dll只需要调用dll提供的CreateWhiteboard、ReleaseWhiteboard创建对应的对象指针及传入对应事件对象,就可以调用IWhiteboard的方法及接收到内部事件。

    现在我需要将dll放到wpf下使用,该如何做。

    我自己有个初步构想在c++dll上封装一个dll,

    IWhiteboard* __stdcall CreateWhiteoard();

    long __stdcall Move(IWhiteboard* whiteboard, const WtRect& source_rect, const WtRect& target_rect);

    long __stdcall Draw(IWhiteboard* whiteboard, const WtRect& rect);使用以上来实现dll的方法调用

    但是回调的没有想到好办法,希望对这些熟练的解答下


    2013年10月21日 2:29

答案

  • Hi skczjun,

      欢迎来到MSDN中文论坛。

      你可以使用com interop或者PInvoke去声明这些DLL API,接下来去调用就行了。具体你可以参考:http://1code.codeplex.com/wikipage?title=Library


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 skczjun 2013年10月23日 5:04
    2013年10月22日 2:53
    版主

全部回复

  • Hi skczjun,

      欢迎来到MSDN中文论坛。

      你可以使用com interop或者PInvoke去声明这些DLL API,接下来去调用就行了。具体你可以参考:http://1code.codeplex.com/wikipage?title=Library


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 skczjun 2013年10月23日 5:04
    2013年10月22日 2:53
    版主
  • 没看到有回调(Callback)的使用,如果有的话,请使用 delegate 来表示回调方法。

    请明示是否为 COM 对象。

    2013年10月22日 3:18
  • 没看到有回调(Callback)的使用,如果有的话,请使用 delegate 来表示回调方法。

    请明示是否为 COM 对象。

    struct IWhiteboard;是C#需要调用的,IWhiteboardEvent是C++底层通知给上层C#的.

    struct IWhiteboard
    {
        virtual long __stdcall Move(const WtRect& source_rect, const WtRect& target_rect) = 0;
        virtual long __stdcall Draw(const WtRect& rect) = 0;
    };

    struct IWhiteboardEvent
    {
        virtual long __stdcall OnMove(const WtRect& source_rect, const WtRect& target_rect) = 0;
        virtual long __stdcall OnUpdate(WtRect& rect, char* buffer, WtStatus flag) = 0;
    };

    long __stdcall CreateWhiteboard(void** whiteboard,void* whiteboardSink);

    long __stdcall ReleaseWhiteboard(void** whiteboard);

    以上均包含在一个.h头文件中。

    2013年10月22日 5:12