我用csharp的委托和[DllImport("kernel32.dll", SetLastError = true)]执行到cpp文件中
委托中的参数是Object类型,我在cpp中如何处理?
Object在csharp中已经被定义好各种类型,但是参数必须要Object! 在cpp下面似乎大小就不能判断了
也许我说的不清楚,这个项目我本身也不大清楚求各位给我一个解决的办法!
委托中的参数是Object类型,我在cpp中如何处理?
Object在csharp中已经被定义好各种类型,但是参数必须要Object! 在cpp下面似乎大小就不能判断了
也许我说的不清楚,这个项目我本身也不大清楚求各位给我一个解决的办法!
解决方案 »
- 求一段DataGridView控件中统计合计值的C#代码
- 短信猫2次开发C#项目,连接GSM Modem总是连接失败???
- 请教:c# winform程序少量数据的存储,使用文件存储还是access数据库?
- 在线等或取treeview树型的节点事件
- VS2010 中文旗舰版 新建 MVC 项目问题
- 如果获取DataGrid 动态绑定列的 页眉的值
- 请问 VS03和05的不同 05中datagridview不包含SetDataBinding 要用什么代替
- 问两个简单的问题:1、在c#的代码编辑窗口左边怎样加上行的序号?2、如果代码编辑窗口中代码很多,怎样…………
- 十万火急,怎么把远程图片下载到服务器上的文件夹呢
- 看看这两句代码的含义???100分,如果不够在给100
- 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の値をセット
又是小日本。