[英]Calling c++ generic method from C#
我创建了一个C ++ 64位库,如下所示
// UnManagedCLI.h
#pragma once
using namespace System;
using namespace System::Runtime::InteropServices;
namespace UnManagedCLI {
[DllImport("msvcrt.dll", EntryPoint = "memset", CallingConvention = CallingConvention::Cdecl, SetLastError = false)]
extern IntPtr MemSet(IntPtr dest, int c, int count);
//[System::Runtime::CompilerServices::ExtensionAttribute]
public ref class Unmanaged sealed
{
public:
static void Free(void* unmanagedPointer)
{
Marshal::FreeHGlobal(IntPtr(unmanagedPointer));
}
generic <typename T> where T : value class
static IntPtr New(int elementCount)
{
return Marshal::AllocHGlobal(sizeof(T) * elementCount);
}
generic <typename T> where T : value class
static IntPtr NewAndInit(int elementCount)
{
int sizeInBytes = sizeof(T) * elementCount;
IntPtr newArrayPtr = Marshal::AllocHGlobal(sizeInBytes);
MemSet(newArrayPtr, 0 , sizeInBytes);
return newArrayPtr;
}
generic <typename T> where T : value class
static void* Resize(void* oldPointer, int newElementCount)
{
return Marshal::ReAllocHGlobal(IntPtr(oldPointer),
IntPtr((int) sizeof(T) * newElementCount)).ToPointer();
}
};
}
从C#中,我将其作为参考,在构建中检查不安全的代码,然后在main中执行以下操作:
using UnManagedCLI;
unsafe class TestWriter
{
static void Main()
{
Unmanaged un;
//I can't access any of the C++ methods in here?
}
}
当我说un.
我在C ++ / CLI库中看不到任何方法吗? 它可以构建并运行良好,但是我根本无法访问C ++。
C +++ / CLI类的所有方法(非托管)都是静态的。 尝试在C#中使用Unmanaged.Method语法(不必创建对象)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.