我们公司有 MBS Axapta 3。老板不想迁移到更高版本的Dynamics AX,所以我坚持这个。
基本上我正在尝试从 Axapta 的 X++ 代码访问我自己的 COM DLL。我希望能够访问 .net 函数,所以我使用本教程创建了我的 DLL:
http://www.softwareandfinance.com/CSharp/CS_ClassLib_Step1_CreateProject.html
我的 DLL 的最终代码是:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace ClaseCOM
{
public class Test
{
[Guid("12D1EDAC-20C0-4faa-A774-B6F4C300B47E")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMathCtrl
{
[DispId(1)]
int AddNumbers(int a, int b);
}
[Guid("282902B4-5FB9-461d-9CD0-FE8DD851F979")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("SFTCSServer.MathCtrl")]
public class MathCtrl : IMathCtrl
{
public MathCtrl() { }
public int AddNumbers(int a, int b)
{
return (a + b);
}
public int MuliplyNumbers(int a, int b)
{
return (a * b);
}
}
public static string ReturnString(string a)
{
return "Ha enviado " + a;
}
}
}
生成 tbl 并使用 gacutil 注册 dll 后,我可以从 Axapta 调用我的 dll,但它无法识别任何方法。它给出了一个错误“方法不存在”
这是我的 x++ 代码:
static void DT_PruebasCOM(Args _args)
{
COM PruebaCOM;
COMVariant a,b; ;
PruebaCOM = new COM('ClaseCOM.Test');
// create variants to hold the arguments for the functions
a = new COMVariant(COMVariantInOut::OUT, COMVariantType::VT_I4);
b = new COMVariant(COMVariantInOut::OUT, COMVariantType::VT_I4);
PruebaCOM.ReturnString();
}
它为 AddNumbers 和 MathCtrl 和 IMathCtrl 提供了相同的错误,所以我真的不知道是否需要设置一些东西才能使此方法在 Axapta 代码中可见。
关于如何解决这个问题的任何想法?
谢谢!!