编组int*到C# 我在C++中有一个函数.ValueFunFoc(char *ARG1,int *ARG2)< /COD>,我想在C语言中使用这个函数(在导入DLL之后)……

编组int*到C# 我在C++中有一个函数.ValueFunFoc(char *ARG1,int *ARG2)< /COD>,我想在C语言中使用这个函数(在导入DLL之后)……,c#,c++,marshalling,C#,C++,Marshalling,你能告诉我该怎么做吗?我在这里很困惑 [DllImport(Dllname)] extern void someFunc([MarshallAsAttribute(UnmanagedType,LPStr)] string arg1, IntPtr arg2); 我应该在这里使用IntPtr吗?我不能把任何int变量的地址从C++中传递,这样它就可以在C++中的指针中出现。 < p>问题是:代码> int */COD>可以用于C.的许多不同场景。p> 例如,如果它只是设置一个int值,您可以将其

你能告诉我该怎么做吗?我在这里很困惑

[DllImport(Dllname)]
extern void someFunc([MarshallAsAttribute(UnmanagedType,LPStr)] string arg1, IntPtr arg2);

我应该在这里使用IntPtr吗?我不能把任何int变量的地址从C++中传递,这样它就可以在C++中的指针中出现。

< p>问题是:代码> int */COD>可以用于C.的许多不同场景。p>
例如,如果它只是设置一个int值,您可以将其封送为
ref int
。但是,如果
int*
表示数组,则需要传递数组(但这不太可能,因为没有长度项,这在通过指针使用数组时很常见)。

实际上可以使用C#中的本机指针,使用不安全的代码块。虽然我不推荐它,因为它会导致非直观的API。您需要描述这些指针的含义。特别是它们指向的数据量,如果函数在返回后保留指针,并且您想将
null
传递给指针。而
char*
则更加模糊。@CodeInChaos是-任何指针类型都有此问题。您始终需要知道本机打算如何处理此变量。