tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
NEIN
ANTWORTEN
20
ZUGRIFFE
917
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Ist denn deine DLL in der Registry registriert?
     

  2. #17
    jkallup jkallup ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    43
    weiss ich nicht, habe

    I:\Projekte\0.1\dBaseDotNet\dBaseDotNet\bin\Debug>regasm.exe /tlb dBaseDotNet.dll
    I:\Projekte\0.1\dBaseDotNet\dBaseDotNet\bin\Debug>gacutil /f /i dBaseDotNet.dll

    gemacht
    aber immer noch init false ....
     

  3. #18
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Mit CoInitialize hat das nichts zu tun, ich zeige dir mal kurz eine Schritt für Schritt Erklärung.

    1. Ich mache eine C#-Klassenbibliothek und nenne die DotNet. In den Eigenschaften stelle ich "Register for COM-Interop" auf ja (im Reiter Build) und unter Assembly Information mach ich "Make assembly COM visible".

    2. Ich erstelle Interface und Klasse:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
     
    namespace DotNet
    {
        [Guid("D0062C71-6FA0-4991-8616-0F82509877F9")]
        public interface IMyInterface
        {
            string SayHello();
        }
     
        [Guid("8AC9C87A-6EA1-4EED-8064-BA58CAF6F2CE")]
        public class MyClass : IMyInterface
        {
            public string SayHello()
            {
                return "Hello by .NET";
            }
        }
    }

    Anschliessend erstell ich ein C++-Projekt, eine Datei main und da kommt folgender Code rein:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #include <Windows.h>
    #include <iostream>
     
    #import "..\Debug\DotNet.tlb"
     
    int main()
    {
        CoInitialize(NULL);
     
        DotNet::IMyInterfacePtr myInterf(__uuidof(DotNet::MyClass));
     
        std::wcout << myInterf->SayHello() << std::endl;
     
        getchar();
     
        CoUninitialize();
    }

    Et voila
     

  4. #19
    jkallup jkallup ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    43
    Danke f+r Dein Beispiel, jetzt geht es.
    Was ich nicht verstehe ist, das VS keine member OMyInterfacePtr anzeigt in der Codevervollständigung.
    Abaer naja,

    danke nochmals.
     

  5. #20
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Was meinst du mit OMyInterfacePtr?
     

  6. #21
    jkallup jkallup ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    43
    IMyInterfacePtr meinte ich, hab zu schnell getippt.
    Aber nun läuft es, Danke für Deine Hilfe
     

Ähnliche Themen

  1. C# - Kann eine Klasse sich selbst an eine andere übergeben?
    Von Aero13 im Forum .NET Datenverwaltung
    Antworten: 2
    Letzter Beitrag: 12.01.11, 15:23
  2. Antworten: 16
    Letzter Beitrag: 15.06.10, 08:29
  3. Wie kann ich in eine Java Klasse mit XML steuern ?
    Von kreez im Forum Java Grundlagen
    Antworten: 3
    Letzter Beitrag: 15.06.09, 12:01
  4. Antworten: 2
    Letzter Beitrag: 16.11.07, 09:11
  5. Antworten: 2
    Letzter Beitrag: 26.10.06, 11:39

Stichworte