Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C++;作为参数的函数 我有一个DLL包含C++代码,在Visual C中非常好用。当我在C++ DLL中创建一个Futon时,它显示在Visual C中,我称之为,即使是参数。但是,当我在C++ DLL中添加函数指针作为参数时,它不能用Visual C来找到。p>_C#_C++_Dll_Parameters_Visual C# Express 2010 - Fatal编程技术网

C# C++;作为参数的函数 我有一个DLL包含C++代码,在Visual C中非常好用。当我在C++ DLL中创建一个Futon时,它显示在Visual C中,我称之为,即使是参数。但是,当我在C++ DLL中添加函数指针作为参数时,它不能用Visual C来找到。p>

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

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(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