2016-04-04 6 views
0

Wie pro MSDN in Bezug auf die Umwandlung der Typen erfolgt durch den RCW zwischen .Net-Client auf nicht verwalteten Objekten vorbei, es steht geschrieben:RCW nicht integer konvertieren, wenn sie von .Net zu COM

... Andere Typen erfordern keine Konvertierung. Zum Beispiel wird ein Standard-Wrapper immer eine 4-Byte-Ganzzahl zwischen verwaltetem und nicht verwaltetem Code übergeben, ohne den Typ zu konvertieren.

AFAIK,

  • Int32 (.NET-Typ) repräsentiert eine 32-Bit-Ganzzahl mit Vorzeichen.
  • integer (VBA) repräsentiert eine 16-Bit-signierte

Wenn also ein Int32 als Parameter von einem NET an einen VBA-Methode übergeben wird und keine Umwandlung durch das RCW erfolgt so, wie sich die Parameter übergeben wird?

Antwort

1

Wichtig ist, wie die Konvertierung zwischen den beiden Welten (unmanaged vs. managed) auf der nativen oder verwalteten Codeseite definiert ist.

Wenn die Konvertierung mithilfe einer COM/Automation-Typbibliothek (z. B. in DLL oder TLB) definiert wird, wird sie automatisch als der entsprechende Typ deklariert, insbesondere für sehr bekannte Typen wie den unsignierten 16-Bit-Integertyp .

Also ein VBA 16-Bit-Typ wird als das Äquivalent deklariert werden (wenn es eine Standard-bekannten Typ ist) .NET 16-Byte. Zum Beispiel wird VBA integer als .NET Int16 (wie das Schlüsselwort short in C#) deklariert.

Wenn Konvertierung manuell definiert wird, z. B. mithilfe von .NET interface mit COM-Anmerkungen, ist es die Aufgabe des Entwicklers sicherzustellen, dass die Deklaration für beide Seiten konsistent ist (oder Probleme/Fehler/Abstürze auftreten können).

Ich empfehle zwei Links im offiziellen Dokument zu diesem Thema: Default Marshaling Behavior und Blittable and Non-Blittable Types zu bestimmen, was als Standard oder bekannte Typen angesehen werden können.

+0

Dank @Simon Mourier für die Erklärung. Wenn ich Sie richtig verstehe, ist es Aufgabe des Programmierers, als Parameter Int16 an eine VBA-Methode für Integer zu übergeben? – ehh

+0

Es hängt davon ab, wie Sie die Interface-Methode definieren, aber wenn es manuell gemacht wird, dann ja, wie es in dieser Frage auf SO getan: http://StackOverflow.com/Questions/25134560/import-c-dll-in-C -sharp-how-to-convert-short-type (obwohl es nicht COM ist, ist es die gleiche Idee) –

+0

Vielen Dank für die Klarstellung – ehh

Verwandte Themen