我认为这可能更通用,但在这种情况下,我尝试为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;
}
}
}
当我尝试将其添加到动态资产净值时,我发现它:
选择并按OK:
到目前为止一切顺利。
然后我喜欢在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编译选项也不起作用),但是是否需要进行某种设置或声明以使我的类可见?
答案 0 :(得分:4)
据我所知,你不能在NAV中使用非托管代码。 您也需要对程序集进行签名 - 在您的示例中,公钥标记为空,因此它无法正常工作。
这样的情况我总是建议创建一个包装器dll来处理非托管代码(例如,这是Microsoft使用Office SDK完成的)
我希望它有所帮助。
干杯!