C# DLL с использованием DllExport: нет точки входа при вызове в VBA

Чтобы не требовать регистрации Dll для всех пользователей электронной таблицы, я пытаюсь использовать позднюю привязку, чтобы пользователям не нужно было добавлять ссылку на Dll.

Я создал Dll в C# с Visual Studio, и хотя я включил "использование RGiesecke.DllExport;" и использовал DllExport для функции, чтобы возвратить объект, содержащий функции, к которым я должен получить доступ в VBA, я все еще получаю ошибку " Ошибка времени выполнения 453": не удается найти точку входа DLL CreateDotNetObject в C:\temp\MyFunctions. длл. "

Код DLL выглядит следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using System.Data;
using System.Text.RegularExpressions;
using Microsoft.TeamFoundation.Client;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Collections;
using System.Collections.ObjectModel;
using System.Threading;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework;
using Microsoft.TeamFoundation.Common;
using Microsoft.VisualBasic;
using System.Diagnostics;
using RGiesecke.DllExport;

namespace MyFunctions
{
    public interface IMyFunctions
    {
        string GetWorkItemLinkList(string WIIDs);
    }

    [CLSCompliant(true), ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
    public class MyFunctions : IMyFunctions
    {
        TfsConfigurationServer server;
        WorkItemStore store;

        private void TFSconnect()
        {
        //Code to connect
        }

        [CLSCompliant(true), ComVisible(true), Description("GetWorkItemLink func")]
        public string GetWorkItemLink(int WIID)
        {
            TFSconnect();

        //Code to build return string "message"

            return message;
        }



        [CLSCompliant(true), ComVisible(true), Description("GetWorkItemLinkList func")]
        public string GetWorkItemLinkList(string WIIDs)
        {
            TFSconnect();

        //Code to build return string "returnStr"

            return returnStr;
        }


    }
    static class UnmanagedExports
    {
        [DllExport]
        [return: MarshalAs(UnmanagedType.IDispatch)]
        static Object CreateDotNetObject()
        {
            return new MyFunctions();
        }
    }
}

и объявление в VBA выглядит следующим образом:

Private Declare Function CreateDotNetObject Lib "c:\temp\MyFunctions.dll" () As Object

Но когда я пытаюсь создать экземпляр объекта, я получаю ошибку, о которой упоминал выше.

Sub test()

    Dim o As Object
    Set o = CreateDotNetObject()

End Sub

Я впервые пытаюсь использовать пользовательские функции DLL в Excel без добавления ссылки в VBA. Функции работают, если я добавляю ссылку (раннее связывание), но DLL не будет распространяться на всех, кто использует электронную таблицу, и мне нужно, чтобы она не вылетала, когда они запускают обычные функции.

РЕДАКТИРОВАТЬ: Дополнительная информация. Я только что заметил, что в дополнение к DLL, когда я строю решение в Visual Studio, я также получаю " Object FileLibrary " и " Exports Library File ". Когда я регистрирую DLL, я должен что-то делать с.exp или.lib?

Спасибо,

Майк

1 ответ

Я строил решение с помощью Platform Target в свойствах библиотеки классов, для которых установлено значение "Любой компьютер", что, по-видимому, не позволяет выполнять экспорт. Когда я переключаю его на "x86", он полностью работает.

Другие вопросы по тегам