У меня есть некоторый код C ++:
namespace Compute {
class __declspec(dllexport) IProgressCB {
public:
virtual void progress(int percentCompleted) = 0;
};
double __declspec(dllexport) compute(IProgressCB *progressCB, ...);
}
, из которого я создаю compute.dll с включенной в Visual Studio 2008 «поддержкой Common Language Runtime Support (/ clr)».
Я хочу вызвать этот код из C #.
Затем я создаю консольное приложение C # и добавляю compute.dll в качестве ссылки. Затем я пытаюсь создать подкласс / реализовать IProgressCB:
public class Progress : Compute.IProgressCB
{
public void progress(int percentCompleted)
{
Console.WriteLine(percentCompleted + "% completed.");
}
}
Однако автозаполнение VS находит пространство имен "Compute", но не какие-либо классы или функции внутри него !? Когда я пытаюсь скомпилировать; он жалуется на то, что IProgressCB не является публичным. Если я пишу публично до объявления IProgressCB, он жалуется на невозможность наследовать от запечатанного типа Compute.IProgressCB.
Что я здесь делаю не так? Я хочу взять существующий код C ++, не вносить в него изменений, но скомпилировать его с помощью / clrc, а затем использовать его с C #. Разве это невозможно?