我用csharp的委托和[DllImport("kernel32.dll", SetLastError = true)]执行到cpp文件中
委托中的参数是Object类型,我在cpp中如何处理?
Object在csharp中已经被定义好各种类型,但是参数必须要Object! 在cpp下面似乎大小就不能判断了
也许我说的不清楚,这个项目我本身也不大清楚求各位给我一个解决的办法!
委托中的参数是Object类型,我在cpp中如何处理?
Object在csharp中已经被定义好各种类型,但是参数必须要Object! 在cpp下面似乎大小就不能判断了
也许我说的不清楚,这个项目我本身也不大清楚求各位给我一个解决的办法!
解决方案 »
- Regex.Match█████C#正则表达式使用方法
- richTextBox1.rtf+="" 不追加
- 从数据库导出数据到excel的数据格式问题
- 如何将xml文件中的记录更新到sqlserver中
- 急求 !在C#下,如何得到WORD模板中表格的行数和当我插入数据时添加行!
- 在哪里恢复VS.NET默认的窗口布局?
- 关于DataGrid方法重载;
- 请问如何实现此种方法分页.
- 在windows mobile 使用Newtonsoft.Json 报错?
- entityframework 6.0 分页 的问题
- HttpWebRequest下载页面有些不能正常下载
- 为什么 ShowInTaskbar=false 后 Application.OpenForms就遍历不到了????
private delegate Int32 BmPrintfDelegate(String pszFormat, Object p01....Object60)//-------------------------------------------------------------
C#相关代码:
public Int32 BmPrintf(String pszFormat, params Object[] Datas)
{ BmPrintfDelegate dele;dele = (BmPrintfDelegate)GetDelegate("BmPrintf", typeof
(BmPrintfDelegate));
PointerManager pm_pszFormat = new PointerManager(pszFormat);
Object[] param = new Object[60];
Int32 count = Datas.Length;
for (int i = 0; i < count; i++)
{
param[i] = Datas[i];
}Int32 rtn = dele(pszFormat,param[0]....param[60]);return rtn;
}//-------------------------------------------------------------
GetDelegate函数中会调用
[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr GetProcAddress(IntPtr hModule, string
lpProcName);//-------------------------------------------------------------
进入到cpp
LONG BmPrintf(PSTR pszFormat, ...)
{
va_list arg_ptr;
PDWORD param; int nCount = 3;
param = (PDWORD)malloc(sizeof(DWORD) * nCount);
if (nCount)
{
va_start(arg_ptr, nCount);
for (int i = 0; i < (SHORT)nCount; i++)
{
param[i] = va_arg(arg_ptr, DWORD);
}
va_end(arg_ptr);
}
// グロバル変数_pCiよりパラメータpszFormatのPPARAINFOを取得
// PPARAINFOのVir(実入力値)にパラメータpszFormatの値をセット
PPARAINFO ppiFormat = (PPARAINFO)(_pCi->paraInfoLst + 0);
strcpy((char*)(ppiFormat->lpvVir), pszFormat); for (int i = 0; i < nCount; i++)
{
PPARAINFO ppiParams = (PPARAINFO)(_pCi->paraInfoLst + (1+i));
memcpy(ppiParams->lpvVir, ¶m[i], sizeof(param[i]));
}
return *((LONG*)(_pCi->lpvVre));
}
//-------------------------------------------------------------Object类型已经做了相应的处理了!都已经改正各种System类型,只是delegate这里一定要用Object做参数,在cpp这里就不能得到正确的数值了
另外你说的不是很清楚
你到底是要把delegate传入 c++ ,还是通过delegate调用c++??
// PPARAINFOのVir(実入力値)にパラメータpszFormatの値をセット
又是小日本。