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

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条)

报告相同问题?

悬赏问题

  • ¥30 dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,求解决办法
  • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
  • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  • ¥15 知识蒸馏实战博客问题
  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题