C# 如何调用C+中定义的函数+;从C代码内部具有int*类型参数的DLL? 我有一个本地的C++ C++ DLL,我想从C代码中调用它,所以我创建了C++/CLI类(如所描述的和),它将包括托管C++代码,它可以直接由任何C代码直接调用,并可以调用本地非托管C++。p> 本机C++ DLL中的一个函数具有int类型的参数。如何在包装器函数中声明,如何将其转换为int* [DllImport("some.dll")] static extern void SomeCPlusPlusFunction(IntPtr arg);

C# 如何调用C+中定义的函数+;从C代码内部具有int*类型参数的DLL? 我有一个本地的C++ C++ DLL,我想从C代码中调用它,所以我创建了C++/CLI类(如所描述的和),它将包括托管C++代码,它可以直接由任何C代码直接调用,并可以调用本地非托管C++。p> 本机C++ DLL中的一个函数具有int类型的参数。如何在包装器函数中声明,如何将其转换为int* [DllImport("some.dll")] static extern void SomeCPlusPlusFunction(IntPtr arg);,c#,c++-cli,C#,C++ Cli,IntPtr是一种大致相当于void*的类型 从你的评论来看,你最好这样做(C#): 但既然AllocHGlobal可以接受int,我不知道为什么您不这么做: IntPtr data = Marshal.AllocHGlobal(size); 这是C/C++通过引用传递值的方式。您应该使用ref或out关键字: 在C++/CLI中,大致如下所示: public ref class Wrapper { private: Unmanaged* impl; public: void

IntPtr是一种大致相当于void*的类型

从你的评论来看,你最好这样做(C#):

但既然AllocHGlobal可以接受int,我不知道为什么您不这么做:

IntPtr data = Marshal.AllocHGlobal(size);

这是C/C++通过引用传递值的方式。您应该使用ref或out关键字:

在C++/CLI中,大致如下所示:

public ref class Wrapper {
private:
    Unmanaged* impl;
public:
    void Foo(int% arg) { impl->Foo(&arg); }
    // etc..
};

然后使用
ToPointer()
方法获取
void*
指针,然后您可以将其转换为
int*
并取消引用。各位朋友,谢谢回复,我使用以下代码段根据您的回复进行指针转换。如果我错了,请告诉我。抱歉犯了任何愚蠢的错误,我是C#&C++/CLI编程的新手。int b=3;IntPtr errno=新IntPtr(&b);int var=(int)Marshal::AllocHGlobal(errno).ToPointer();大家好,非常感谢你们的回复,我终于成功了。我使用INTPR声明int,然后使用TopoIt来转换它并在原生C++中使用它。但现在我不知道如何还原ir,我的意思是如何将int*转换回IntPtr。如果有人知道答案,我请求回复。根据其他参数(如果附近有大小参数),这也可能是传递动态分配数组的一种方式。
[DllImport("something.dll")]
private static extern void Foo(ref int arg);
public ref class Wrapper {
private:
    Unmanaged* impl;
public:
    void Foo(int% arg) { impl->Foo(&arg); }
    // etc..
};