activeX / DotNet DLL für Xbase++
Verfasst: Mi, 06. Jul 2016 18:48
hi,
wer ist daran interessiert ?
Nachtrag : Titel erweitert
wer ist daran interessiert ?
Nachtrag : Titel erweitert
Das deutschsprachige Forum für Entwickler in der Xbase-Welt, ein Angebot des Deutschsprachige Xbase-Entwickler e. V.
https://xbaseforum.de/
wenn du XbpToolbar() benutzen willst muss MSCOMCTL.OCX registriert sein damit du darauf zugreifen kannst.Benz hat geschrieben:chon gelesen, dass es gehen soll, wenn man die DLL als COM-Objekt registriert, die von C# kommt, damit man sie in Xbase++ nutzen kann, aber das habe ich auch nicht hinbekommen, warum auch immer.
Wenn ich mir aber zum Beispiel irgendwelche COM-Objekte anschaue z.B. von Excel dann kann ich das ja auch problemlos mit Xbase++ benutzen. Oder ist das eine andere Technik als DLL?
Code: Alles auswählen
C:\Windows\Microsoft.NET\Framework\VERSION***\RegAsm.exe
Code: Alles auswählen
RegAsm "X:\Sample\Examples.dll" /codebase
Code: Alles auswählen
#pragma library( "ascom10.lib" )
PROCEDURE MAIN
LOCAL o
o = CREATEOBJECT("InteropExamples.Examples")
? o:HelloWorld("from Dotnet to Xbase++")
? o:Add(10,20)
WAIT
RETURN
Code: Alles auswählen
#pragma library( "ascom10.lib" )
PROCEDURE MAIN
LOCAL o
LOCAL xSumme
o = CREATEOBJECT("xInteropExample.ExampleClass")
IF !empty(o)
? o
ELSE
? "o ist empty"
ENDIF
? o:ExampleMethode()
WAIT
RETURN
... Ja ... es scheint die selbe ...Benz hat geschrieben:Du meinst wenn ich nach {16A9F43B-39FA-39FF-A8B0-8E8DAFE29125} suche,
...
Das ist doch dasselbe oder meinst du etwas anderes?
Habe das schon anders erlebt, deshalb mache ich es sicherheitshalber und zur besseren Lesbarkeit= und := sind hier gleichwertig, es dient nur der besseren Lesbarkeit.
Das Sample hab ich selbst erstellt, es ist eigentlich nicht mehr als eine Klasse mit einer Methode, die einen Text zurückgibt.AUGE_OHR hat geschrieben:... Ja ... es scheint die selbe ...Benz hat geschrieben:Du meinst wenn ich nach {16A9F43B-39FA-39FF-A8B0-8E8DAFE29125} suche,
...
Das ist doch dasselbe oder meinst du etwas anderes?
... vielleicht mal dem Ausgabe Path ändern ... als Administrator VS2015 starten.
p.s. woher hast du dein Sample ?
Code: Alles auswählen
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace xInteropExample
{
public class ExampleClass
{
public string ExampleMethode()
{
return "pihjpih";
}
}
}
hast du die Syntax Prüfung an ?Benz hat geschrieben:Das Sample hab ich selbst erstellt, es ist eigentlich nicht mehr als eine Klasse mit einer Methode, die einen Text zurückgibt.Code: Alles auswählen
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace xInteropExample { public class ExampleClass { public string ExampleMethode() { return "pihjpih"; } } }
Code: Alles auswählen
using System.Runtime.InteropServices;
du meinst als Projekt? Da habe ich Klassenbibliothek gewählt. Wo wähle ich denn COM DLL Active X aus?hast du wirklich COM DLL ActiveX gewählt ? das sollte dann schon automatisch eingefügt sein.
Code: Alles auswählen
extern "C" void __declspec( dllexport ) __cdecl OpenMyForm( void )
Code: Alles auswählen
using System;
using System.Runtime.InteropServices; // MUSS
namespace InteropExamples // Name beliebig
{
[ComVisible(true)] // MUSS
[ClassInterface(ClassInterfaceType.AutoDual)] // MUSS. AutoDual enthält auch iDispatch
[ProgId("InteropExamples.Examples")] // MUSS, Name beliebig
public class Examples // hier geht es los, Name beliebig
nutzt die iDispatch Schnittstelle. die [DispId(xxx)] Einträge legen nun die "Zuordnung" zu den Methoden fest.Publishing COM Events
public.xbase++.activex
20. Januar 2008
sowieProgress state in Taskbar Icon
ot4xb.public
3. März 2016
---@ole32:CoCreateInstance()
ot4xb.public
5. September 2016