liulangdelangzi 2018-10-12 02:10 采纳率: 50%
浏览 1853
已采纳

C#调用C++的dll,C++程序中给结构体中变量赋值this指针,对应C#中应该怎么写呢?

C++程序中有一个结构体

 struct Ctx
{
    void* owner;
    DevInfo devinfo;
};

对话框类头文件中有

 Ctx m_ctx;//回调上下文, 作为回调函数的参数

在对话框初始化程序中有

 m_ctx.owner = this;

我在C#中定义结构体

 public struct Ctx
    {
       public  IntPtr powner;
       public  DevInfo devinfo;
    }
    定义了

    public  Ctx m_ctx;

    那么怎么给m_ctx.powner赋值呢?

    下面是部分代码,需要的话也可以把代码都发出来
    C++
 BOOL Cdbc_demoDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);         // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO: 在此添加额外的初始化代码
    m_hDBC = DBC_Init();
    if (INVALID_DBC_HANDLE == m_hDBC)
    {
        MessageBox(_T("生成DBC句柄失败!"));
        return TRUE;
    }
    m_ctx.owner = this;
    m_ctx.devinfo = m_devInfo;
    DBC_SetSender(m_hDBC, OnSendFunc, &m_ctx);
    DBC_SetOnMultiTransDoneFunc(m_hDBC, OnMultiTransDoneFunc, &m_ctx);
    InitList();
    if (!InitDevice())
    {   
        MessageBox(_T("打开设备失败!"));
        return TRUE;
    }

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

  • 写回答

4条回答

  • StEnchanter 2018-10-12 05:52
    关注

    用handle可以实现你功能吗?
    m_ctx.powner = this.Handle

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?