Вызов статического члена C ++ / CLI класса public ref из C # - PullRequest
0 голосов
/ 13 марта 2012

У меня проблемы с реализацией правильного способа использования этого прототипа, реализованного в C + + / CLI с использованием CSharp.

Реализация 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 ]

4 голосов
/ 13 марта 2012

DllImportAttribute для NATIVE импорта. Ваш класс C ++ / CLI не является родным (ref class), поэтому вам не нужно импортировать его таким образом. Просто добавьте ссылку на MyClassLib.dll и используйте ее в качестве стандартного, обычного, простого класса .NET (вызовите MyClass.SIncrement(), как вы это делаете с классом C #).

2 голосов
/ 13 марта 2012

number = MyClass.SIncrement(number); и без P / Invoke

...