从C#调用公共ref类的C ++ / CLI静态成员

时间:2012-03-13 13:10:03

标签: c# .net c++-cli managed

我无法使用CSharp在C + + / CLI中实现使用此原型的正确方法。

C ++ / CLI实现:

// MyClassLib.h
#pragma once
using namespace System;

namespace MyClassLib 
{
    public ref class MyClass
    {
    public:
        int Increment(int number);
        static int SIncrement(int number);
    };
}
// This is the main DLL file.

#include "stdafx.h"
#include "MyClassLib.h"

namespace MyClassLib
{
    int MyClass::Increment(int number)
    {
        return number+1;
    }
    int MyClass::SIncrement(int number)
    {
        return number+1;
    }
}

用法实施:

using System;
using System.Runtime.InteropServices;
using MyClassLib;

namespace UseClassLib
{
    class Program
    {
        [DllImport("MyClassLib.dll")]
        public static extern int SIncrement(int number);

        static void Main(string[] args)
        {
            MyClass mc = new MyClass();

            int number = 1;
            number = mc.Increment(number); // increment ok

            number = SIncrement(number); // System.EntryPointNotFoundException here
        }
    }
}

2 个答案:

答案 0 :(得分:4)

DllImportAttribute用于 NATIVE 导入。您的C ++ / CLI类不是本机(ref class),因此您不必以这种方式导入它。只需添加对MyClassLib.dll的引用,并将其用作标准的,普通的,简单的.NET类(调用MyClass.SIncrement(),就像使用C#类一样)。

答案 1 :(得分:2)

number = MyClass.SIncrement(number); 而没有P / Invoke