C# C++;作为参数的函数 我有一个DLL包含C++代码,在Visual C中非常好用。当我在C++ DLL中创建一个Futon时,它显示在Visual C中,我称之为,即使是参数。但是,当我在C++ DLL中添加函数指针作为参数时,它不能用Visual C来找到。p>
C++函数:C# C++;作为参数的函数 我有一个DLL包含C++代码,在Visual C中非常好用。当我在C++ DLL中创建一个Futon时,它显示在Visual C中,我称之为,即使是参数。但是,当我在C++ DLL中添加函数指针作为参数时,它不能用Visual C来找到。p>,c#,c++,dll,parameters,visual-c#-express-2010,C#,C++,Dll,Parameters,Visual C# Express 2010,C++函数: int TEST(int *func) // Works fine and shows up in visual C#. { return 0; } int TEST2(int (*func)()) // Works, however doesn't show up in Visual C# { return 0; } 更新: 当我从C#调用TEST2时,我得到一个错误:'TEST2'不受语言的支持函数指针参数的声明如下: int TEST2(in
int TEST(int *func) // Works fine and shows up in visual C#.
{
return 0;
}
int TEST2(int (*func)()) // Works, however doesn't show up in Visual C#
{
return 0;
}
更新:
当我从C#调用TEST2时,我得到一个错误:
'TEST2'不受语言的支持
函数指针参数的声明如下:
int TEST2(int (*func)()) { /*...*/ }
我很确定您需要在
*func
周围加上括号,告诉编译器*func是指向函数int(*func)(
的指针,而不是int*(*func)(
)的指针,而这正是您所拥有的。您所说的“VisualC无法找到它”是什么意思,我猜想您的意思是int(*func)(
),即指向返回int的函数的指针。如前所述,参数类型是返回int*
的函数(在该上下文中,它表示指向返回int*
的函数的指针)。如果目标是将不带参数且返回int*
的函数作为输入,则缺少括号可能是有意的。从这个问题中,我无法判断这是否是目标。@templatetypedef:在这种情况下,它应该是int*(*func)()
@SamH:使用函数类型作为函数参数类型是有效的,相当于在该上下文中使用指向该函数类型的指针。只有在没有函数参数的情况下,我才能从C#调用该函数。@KerrekSB:不一定,标准规定函数类型的参数转换为函数指针(作为包含数组衰减的转换的一部分),也就是说,void f(void g())
由编译器在处理函数声明时转换为void f(void(*g)()
),转换方式与void f(int a[1])
转换为void f(int*a)的方式类似
。我仍然同意,用户很可能想要一个指向函数的指针,该函数返回一个普通的int