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 を生成し、dll を gacutil に登録した後、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