CLR(c ++ .net)作为动态资产净值的附加

时间:2016-11-03 09:22:27

标签: c++ .net dynamics-nav

我认为这可能更通用,但在这种情况下,我尝试为Microsoft Dynamic NAV创建一个c ++ CLR。​​

如果我在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 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包装器),他们也工作正常。

然而,当我按“OK”时,我确实收到错误,告诉我它无法加载“VisualCPP”类型。

所以,问题是:我错过了什么?我知道CLR代码是不同的,因为它不是纯粹的托管(即使使用depricated / pure编译选项也不起作用),但是是否需要进行某种设置或声明以使我的类可见?

1 个答案:

答案 0 :(得分:4)

据我所知,你不能在NAV中使用非托管代码。 您也需要对程序集进行签名 - 在您的示例中,公钥标记为空,因此它无法正常工作。

这样的情况我总是建议创建一个包装器dll来处理非托管代码(例如,这是Microsoft使用Office SDK完成的)

我希望它有所帮助。

干杯!