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
}