J'ai une DLL .net qui est écrite en c sharp, qui utilise linq pour lire les données et les retourner à une autre application vba appelant. Je n'ai pas prévu cela, donc le projet initial a été écrit pour qu'il soit accessible par une autre application .net. alors maintenant je viens de découvrir qu'il y a beaucoup de choses sur l'interopérabilité .net com et quoi d'autre. J'ai donc appris que j'ai besoin d'une interface utilisateur pour le faire fonctionner, et j'ai besoin de regasm la DLL pour créer un fichier de bibliothèque de type que je peux référencer directement à partir de l'application vba/vb6Comment faire pour que mon .net dll soit référencé dans vba/com?
À partir de maintenant je reçois le problème de quand je fais cela Dim obj Comme DtasApiTool.Program, c'est bien mais sur la ligne suivante set obj = new DtasApiTool.Program provoquera une erreur sur New opérateur n'est pas utilisé correctement . quand j'ai testé another .net dll from codeproject cela fonctionne bien. Donc, ma question est, qu'est-ce que je fais mal ici?
- Est-ce que j'utilise trop de références, comme dans l'utilisation de system.xxx?
- ou est-il dû à certains fichiers que j'ai dans le fichier projets, à savoir app.config , etc.
- et comment puis-je le guid?
que j'ai connaissance très limitée ou de l'expérience dans tout cela, je fonde ce qui est bon ou mauvais à partir du code exemple dans le projet de code :(donc ne hésitez pas à commenter quoi que ce soit.
cette est le code que j'utilise:..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.OleDb;
using System.Data;
using System.Xml;
using System.Xml.Linq;
using System.IO;
//using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
//using System.Windows.Forms;
namespace DtasApiTool
{
[Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7059")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface _Program
{
[DispId(1)]
string Get_All_Locales();
[DispId(2)]
string Get_All_Levels(string locale);
[DispId(3)]
string Get_Subjects_ByLocaleLevelId(string locale, int levelId);
[DispId(4)]
string Get_Topic_ByLevelIdLocaleSubjectId(int levelId, string locale, int subjectId);
[DispId(5)]
string Get_Subtopic_ByLevelIdLocaleSubjectIdTopicId(int levelId, string locale, int subjectId, int topicId);
[DispId(6)]
string Get_Skill_ByLevelIdLocaleSubjectIdTopicIdSubtopicId(int levelId, string locale, int subjectId, int topicId, int subtopicId);
[DispId(7)]
string Get_All_Subjects(string locale);
}
[Guid("09FE32AD-4BF8-495f-AB4D-6C61BD463EA4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("DtasApiTool.Program")]
public class Program : _Program
{
...}
}
Avez-vous coché le drapeau "Register for COM interop" dans les propriétés du projet? – sharptooth
yup, c'est la première chose que j'ai faite – melaos