Я думаю, что это может быть более общим, но в этом случае я пытаюсь создать CLR c ++ для Microsoft Dynamic NAV.
Если я делаю это в C #, он работает нормально. Код C #:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VisualCSharp
{
public class MyTest
{
public MyTest()
{
}
public int AddTest(int a, int b)
{
return a + b;
}
}
}
Когда я пытаюсь добавить это в Dynamic NAV, я нахожу это:
Выберите и нажмите ОК:
Все идет нормально.
Затем мне нравится делать то же самое в C ++ с классом CLR.
Я начинаю с создания библиотеки классов C ++ CLR и добавляю код для теста: (я сделал это здесь, просто для простоты кода, но это не имеет значения, если я его отделю).
#pragma once
using namespace System;
namespace VisualCPP
{
public ref class MyTest
{
public:
MyTest()
{
};
int AddTest(int a, int b)
{
return a + b;
};
};
}
Сделайте то же самое с этим. В списке ассемблера он совпадает с надстройкой VisualCSharp, но отображается как процессор x86, но это нормально. У меня есть C #, который также делает это (обертки COM), и они также работают нормально.
Однако, когда я нажимаю «ОК», я получаю сообщение об ошибке, сообщающее, что он не может загрузить тип «VisualCPP».
Итак, вопрос: что мне не хватает? Я знаю, что код CLR отличается тем, что он не является чисто управляемым (даже при использовании опции компримированной / чистой компиляции не работает), но есть ли какая-то установка или объявление, которые нужно было сделать, чтобы сделать мой класс видимым?
Насколько я знаю, вы не можете использовать неуправляемый код в NAV.
Ваша сборка также должна быть подписана — в вашем примере токен открытого ключа имеет значение null, поэтому он не будет работать.
В подобных ситуациях я всегда рекомендую создавать DLL-оболочку для обработки неуправляемого кода, хотя это (например, это то, что Microsoft сделала с Office SDK)
Я надеюсь, что это помогает.
Ура!
Других решений пока нет …