Benutzer mit den meisten Antworten
COM Interop: decimal verwenden

Frage
-
Hallo allerseits!Ich habe eine .NET-DLL, deren Funktionalität ich auch in einem VB6-Programm verwendenmöchte. Dazu habe ich eine Wrapper-DLL mit einem Interface und einer Klasse erstellt:[ComVisible(true)][Guid("9BA2814B-E5BA-48AB-B8B1-73D34506F5FB")][InterfaceType(ComInterfaceType.InterfaceIsDual)]public interface IDirectDebitDocument{void Initialize(string id,string text,string creditorId,string creditorName,string creditorIban,string creditorBic);void AddBooking(string id, string name, string iban, string bic, decimal amount);void WriteXmlFile(string fileName);}[ComVisible(true)][Guid("8AF99E3B-E4F5-413E-8F35-9C34BC0788E2")][ClassInterface(ClassInterfaceType.None)]public class DirectDebitDocument : IDirectDebitDocument{// Methoden von IDirectDebitDocument}In VB6 kann ich ein Objekt vom Typ DirectDebitDocument problemlos erstellen, auch dieMethoden Initialize und WriteXmlFile funktionieren einwandfrei.Sowie ich aber die Methode AddBooking verwenden möchte, bekomme ich folgende Fehlermeldung:Fehler beim Kompilieren:Funktion oder Schnittstelle kann nur eingeschränkt verwendet werdenoder verwendet einen Typ der Automatisierung, der von Visual Basicnicht unterstützt wirdHier der zugehörige VB-Code:Dim DD As DirectDebitDocumentSet DD = New DirectDebitDocumentDD.Initialize "ABC", "Lorem Ipsum", "XYZ", "MeineFirma", "IBANXXX", "BICXXX"DD.AddBooking "ABCDE", "Dr. Max MUSTERMANN", "IBANYYY", "BICYYY", CDec(456.78)DD.WriteXmlFile "Z:\Temp\TestDD.VB6.xml"Das Problem ist der Datentyp decimal beim Parameter amount - ändere ich diesen z.B. aufstring funktioniert auch der Aufruf von AddBooking.Mein grundsätzliches Ziel ist es, aus der VB-Applikation heraus einen Currency-Wert andie .NET-DLL zu übergeben.Was mache ich falsch?TIAGrüßeThomas--Any problem in computer science can be solved with another layerof indirection. But that usually will create another problem.David Wheeler
Antworten
-
Hallo Thomas,
Visual Basic Classic kann mit dem .NET Decimal nichts anfangen.
Möglich ist es Decimal als Currency zu übertragen:
void AddBooking(string id, string name, string iban, string bic, <Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.Currency)> _ decimal amount);
Mehr siehe: Visual Basic Fusion: Best Practices to Use Visual Basic 6 and Visual Basic .NET Together
- Als Antwort markiert Thomas Schremser Donnerstag, 22. November 2012 08:08
Alle Antworten
-
-
Hallo Thomas,
Visual Basic Classic kann mit dem .NET Decimal nichts anfangen.
Möglich ist es Decimal als Currency zu übertragen:
void AddBooking(string id, string name, string iban, string bic, <Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.Currency)> _ decimal amount);
Mehr siehe: Visual Basic Fusion: Best Practices to Use Visual Basic 6 and Visual Basic .NET Together
- Als Antwort markiert Thomas Schremser Donnerstag, 22. November 2012 08:08
-
-
Hallo Elmar!> Visual Basic Classic kann mit dem .NET Decimal nichts anfangen.>> Möglich ist es Decimal als Currency zu übertragen:> void AddBooking(string id, string name, string iban, string bic,> <Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.Currency)> _> decimal amount);Danke! Das wars.> Mehr siehe: Visual Basic Fusion: Best Practices to Use Visual Basic 6 and Visual Basic .NET TogetherIch hätte beim googeln doch nicht auf C# einschränken sollen ;-)GrüßeThomas--Any problem in computer science can be solved with another layerof indirection. But that usually will create another problem.David Wheeler