2016-11-03 1 views
0

Я думаю, что это может быть более общим, но в этом случае я пытаюсь создать CLR CLR для Microsoft Dynamic NAV.CLR (C++ .net) как Addin to 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, я нахожу это:

Dynamic NAV Assembly List

Выберите и нажмите OK:

Select list

До сих пор так хорошо.

Тогда мне нравится делать то же самое в 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 отличается тем, что он не управляется чистым (даже с использованием параметра «личный/чистый компилятор» не работает), но есть ли какие-то настройки или декларации, которые должны были быть сделаны, чтобы сделать мой класс видимым?

ответ

4

Насколько я знаю, вы не можете использовать неуправляемый код в NAV. Вам также необходимо подписать сборку - в вашем примере токен открытого ключа равен нулю, поэтому он не сработает.

Ситуация, как я всегда рекомендую, чтобы создать оболочку DLL для обработки неуправляемого кода, хотя он (например, это то, что Microsoft была сделано с офисом SDK)

Я надеюсь, что это помогает.

Cheers!

+0

Спасибо, но мой пример, где токен открытого ключа имеет значение null, является C# и работает безупречно. Но вы можете что-то сказать. Я просто надеялся не делать много слоев упаковки. :) –