Wie kann ich eine C# Klasse in C++ verwenden? Programm crasht :-(

Eben, daher jetzt zum vierten Mal, was ist zeigt dir der Debugger als Rückgabewert von dieser Zeile an:
C++:
HRESULT hr = CreateInstance(clsid, pOuter, dwClsContext);
 
Habe den Code ein wenig geändert, aber der Block wird nicht abgearbeitet - init false ...

Code:
#include <tchar.h>
#include <Objbase.h>
#include <iostream>
#pragma comment(lib, "Ole32")
#import "I:\\Projekte\\0.1\\dBaseDotNet\\dBaseDotNet\\bin\\Debug\\dBaseDotNet.tlb"  no_namespace //raw_interfaces_only

using namespace std;

int main(int argc, char** argv)
{
    HRESULT hr = CoInitialize(NULL);

	if (SUCCEEDED(hr))
	{
		cout << "init: ok" << endl;
	
		try
		{
			Class1Ptr p(__uuidof(Class1));
			cout << "The result is: " << p->Test_Class1();
		}
		catch (...)
		{
			cout << "Error" << endl;
		}

		CoUninitialize();
	}
	else cout << "init false" << endl;

    return 0;
}
 
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 ....
 
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:
C#:
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:
C++:
#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 ;)
 
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.
 

Neue Beiträge

Zurück