0

我们公司有 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 代码中可见。

关于如何解决这个问题的任何想法?

谢谢!!

4

0 回答 0