繁体   English   中英

从C#调用C ++通用方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM