c# - machine - the module was loaded but the entry-point dllregisterserver was not found




Come registro una DLL COM scritta in C#con Regsvr32? (2)

È possibile creare una semplice applicazione Windows e utilizzare il seguente codice per registrare DLL COM. Assicurati di aggiungere il file manifest da eseguire come amministratore:

...

namespace comregister
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string framework = Environment.GetEnvironmentVariable("SystemRoot") + @"\Microsoft.NET\Framework\v2.0.50727\";

        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
                button2.Enabled = true;
                button3.Enabled = true;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            FileInfo fi = new FileInfo(textBox1.Text);
            string fn = fi.FullName.Substring(0, fi.FullName.Length - 4);
            string dll = "\"" + fi.FullName + "\"";
            string tlb = "\"" + fn + ".tlb\"";

            Process p = new Process();
            p.StartInfo.FileName = framework + "regasm.exe";
            p.StartInfo.Arguments = dll + " /tlb:" + tlb + " /codebase";
            p.Start();
            p.WaitForExit();
            label2.Text = "registered";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            FileInfo fi = new FileInfo(textBox1.Text);
            string dll = "\"" + fi.FullName + "\"";

            Process p = new Process();
            p.StartInfo.FileName = framework + "regasm.exe";
            p.StartInfo.Arguments = dll + " /unregister";
            p.Start();
            p.WaitForExit();
            label2.Text = "unregistered";
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

Ho un'applicazione VB6 che utilizza una DLL COM. La DLL è scritta in C #. Nelle proprietà del progetto C # ho selezionato l'opzione "Registra per interoperabilità COM". L'app VB6 funziona perfettamente sul mio computer di sviluppo. Il codice C # segue esattamente questo formato: CodeProject C # COM Example

Quando si esegue la distribuzione su altre macchine, Regsvr32.exe mi dà il seguente errore quando provo a registrare la DLL:

The module "MyCOM.dll" was loaded but the entry-point DLLRegisterServer was not found.

Cosa significa questo? Nessun tutorial / documentazione che ho letto sulle DLL COM dice qualcosa su "entry-point DLLRegisterServer".

Abbiamo avuto problemi MAJOR utilizzando RegAsm.exe su macchine diverse, quindi abbiamo davvero bisogno di una soluzione in cui possiamo eseguire regsvr32.exe invece che funzionerà per qualsiasi macchina che distribuiremo a (cioè XP, Vista, Windows 7, macchine x86, x64 macchine, ecc.)

Cosa devo aggiungere al mio codice C # per renderlo registrabile con regsvr32.exe?


Non puoi Le librerie di classi gestite [ComVisible] devono essere registrate con Regasm.exe.

Puoi farlo dall'IDE con Project + Properties, Build tab, Register for COM interop checkbox. Se si esegue Regasm.exe, in genere si desidera l'opzione della riga di comando / codebase in modo da non dover inserire l'assembly nel GAC. Un'altra opzione è consentire a Regasm.exe di generare un file .reg con l'opzione / regfile. Dovresti eseguirlo sul computer di destinazione per aggiornare il registro.

Modifica: ho appena visto l'osservazione dei "problemi principali". Nota bene quali sono, a corto di / codebase. Devi scegliere la versione giusta su macchine a 64 bit. Ci sono due. E hai bisogno di un prompt dei comandi con privilegi elevati in modo che il controllo dell'account utente non interrompa.





regsvr32