{"id":3099,"date":"2022-07-14T08:57:57","date_gmt":"2022-07-14T08:57:57","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?p=3099"},"modified":"2022-07-28T08:43:43","modified_gmt":"2022-07-28T08:43:43","slug":"kommunikation-zwischen-c-und-c-eine-anleitung","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/","title":{"rendered":"Kommunikation zwischen C# und C++ \u2013 Eine Anleitung"},"content":{"rendered":"\n<p>Angenommen Sie haben die Anforderung, Ihre in C# geschriebene Anwendung mit einer C++-Anwendung kommunizieren zu lassen, um beispielsweise Sensordaten von einer Hardwarekomponente auszulesen. Dann k\u00f6nnen Sie f\u00fcr diese Kommunikation aus verschiedenen M\u00f6glichkeiten w\u00e4hlen. In diesem Artikel wollen wir uns die Integration eines COM-Servers ansehen. Dazu wird im Folgenden ein C++-basierter COM-Server aus einem C#-Client heraus angesprochen.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"338\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-600x338.jpg\" alt=\"Symbolic image: zwei H\u00e4nde an einem Tablet\" class=\"wp-image-3117\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-600x338.jpg 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-1024x576.jpg 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-768x432.jpg 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-1536x864.jpg 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-2048x1152.jpg 2048w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-640x360.jpg 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-1200x675.jpg 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-1920x1080.jpg 1920w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 600px\" \/><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Voraussetzungen<\/h2>\n\n\n\n<p>Um diesem Tutorial folgen zu k\u00f6nnen, ben\u00f6tigen Sie folgende Dinge:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Visual Studio 2019 oder eine neuere Version<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Visual Studio Profil .NET Desktopentwicklung<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Visual Studio Profil Desktopentwicklung mit C++<\/li><\/ul>\n\n\n\n<p>Die Profile k\u00f6nnen \u00fcber den Visual Studio Installer ausgew\u00e4hlt und installiert werden.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Schritt-f\u00fcr-Schritt-Anleitung: Integration von einem C++-COM-Server mit einem C#-Client<\/h2>\n\n\n\n<p>Wichtig: N\u00e4here Informationen finden Sie auch in diesem Github <a href=\"https:\/\/github.com\/zeiss-digital-innovation\/CppComServerCSharpInteroperability\">Repository<\/a>.<\/p>\n\n\n\n<p>Zus\u00e4tzlich erstellen wir einen C++-Server:<\/p>\n\n\n\n<p>Schritt 1: Erstellen Sie ein C++-ATL-Projekt mit Executable Datei (.exe) als Anwendungstyp.<\/p>\n\n\n\n<p>Schritt 2: Bitte l\u00f6schen Sie das Projekt ComServerPS.<\/p>\n\n\n\n<p>Schritt 3: Mit der rechten Maustaste auf den Server klicken und eine neue Klasse (ComServerMgr) hinzuf\u00fcgen. Das Ergebnis sollte wie im Bild unten aussehen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1-1024x612.png\" alt=\"Screenshot COM-Server\" class=\"wp-image-3185\" width=\"768\" height=\"459\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1-1024x612.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1-600x359.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1-768x459.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1-1536x918.png 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1-640x383.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1-1200x717.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_1.png 1902w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Abbildung 1: Hinzuf\u00fcgen einer neuen neue Klasse (ComServerMgr)<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Schritt 4: Im ComServerMgr.h die AddOne() Methodheader hinzuf\u00fcgen, damit wir diese in die Klasse einf\u00fcgen k\u00f6nnen:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public:\n\tCComServerMgr()\n\t{\n\t}\n\nDECLARE_REGISTRY_RESOURCEID(106)\n\n\nBEGIN_COM_MAP(CComServerMgr)\n\tCOM_INTERFACE_ENTRY(IComServerMgr)\n\tCOM_INTERFACE_ENTRY(IDispatch)\nEND_COM_MAP()\n\n\n\n\tDECLARE_PROTECT_FINAL_CONSTRUCT()\n\n\tHRESULT FinalConstruct()\n\t{\n\t\treturn S_OK;\n\t}\n\n\tvoid FinalRelease()\n\t{\n\t}\n\npublic:\n\tSTDMETHOD(AddOne)(int value, int* result);\n\n\n};\n\nOBJECT_ENTRY_AUTO(__uuidof(ComServerMgr), CComServerMgr)\n<\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Schritt 5: Im ComServerMgr.cpp die AddMethod() hinzuf\u00fcgen. \u00dcber jene wollen wir sp\u00e4ter den gegebenen Wert um eins hochz\u00e4hlen:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">STDMETHODIMP CComServerMgr::AddOne(int value, int* result)\n{\n\tint res = value + 1;\n\tif (result != nullptr)\n\t{\n\t\t*result = res;\n\t\treturn S_OK;\n\t}\n\n\treturn S_OK;\n}\n<\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Schritt 6: In ComServer.idl die AddMethod() ebenfalls hinzuf\u00fcgen und sie somit bekannt machen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_2-1024x503.png\" alt=\"Screenshot COM-Server\" class=\"wp-image-3186\" width=\"768\" height=\"377\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_2-1024x503.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_2-600x294.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_2-768x377.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_2-640x314.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_2-1200x589.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_2.png 1457w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Abbildung 2: AddMethod() im ComServer.idl<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Schritt 7: Das Projekt bauen. Anschlie\u00dfend auf der Festplatte in das Verzeichnis gehen, in dem der Quellcode liegt und dort das Unterverzeichnis Build ausw\u00e4hlen. Dort sollte nun die ComServer.exe liegen. Nun die Eingabeaufforderung als Administrator \u00f6ffnen und folgenden Befehl eingeben:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>ComServer.exe \/Regserver<\/em><\/p>\n\n\n\n<p>Bitte beachten Sie, dass ComServer der Name des Projekts ist. Wenn z.B. das Projekt \u201eHelloWorld\u201c hei\u00dft, dann m\u00fcsstet der Befehl lauten: \u201eHelloWorld.exe \/Regserver\u201c.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Jetzt fahren wir mit dem Erstellen des <strong>C#-Clients<\/strong> fort.<\/p>\n\n\n\n<p>Der Ablauf ist einfacher, als f\u00fcr den COM-Server:<\/p>\n\n\n\n<p>Schritt 1: Erstellen einer Konsolenanwendung.<\/p>\n\n\n\n<p>Schritt 2: Den COM Verweis hinzuf\u00fcgen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3-1024x277.png\" alt=\"Screenshot COM-Server\" class=\"wp-image-3187\" width=\"768\" height=\"208\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3-1024x277.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3-600x162.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3-768x208.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3-1536x415.png 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3-640x173.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3-1200x324.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_3.png 1917w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Abbildung 3: COM Verweis hinzuf\u00fcgen<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Schritt 3: Nach unten scrollen, bis der ComServerLib Verweis zu sehen ist:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4-1024x548.png\" alt=\"Screenshot COM-Server\" class=\"wp-image-3188\" width=\"768\" height=\"411\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4-1024x548.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4-600x321.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4-768x411.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4-1536x821.png 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4-640x342.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4-1200x642.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_4.png 1915w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Abbildung 4: ComServerLib Verweis<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Bitte beachten Sie, dass der Verweis ComServerLib hei\u00dft, weil wir das Server-Projekt ComServer genannt haben. Wenn z.B. das Projekt \u201eHelloWorld\u201c hei\u00dft, w\u00fcrde der Verweis HelloWorldLib hei\u00dfen.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Schritt 4: Folgenden Code hinzuf\u00fcgen, durch den der COM-Server beim Start der Konsolenapplikation instanziiert und anschlie\u00dfend die Zahl 3 \u00fcbergeben wird.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    class Program\n    {\n        static void Main(string[] args)\n        {\n            IComServerMgr mgr = new ComServerMgr();\n            var x = mgr.AddOne(3);\n\n            Console.WriteLine(\"Hello World!\");\n        }\n    }\n<\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Schritt 5: Um das besser nachvollziehen zu k\u00f6nnen, ist es auch m\u00f6glich, den Code im Debug-Modus und mit einem Breakpoint zu starten. Die Ausf\u00fchrung wird dann an der entsprechenden Stelle stehen bleiben.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"793\" height=\"439\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_5.png\" alt=\"Code snippet\" class=\"wp-image-3189\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_5.png 793w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_5-600x332.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_5-768x425.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_ComServer_5-640x354.png 640w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><figcaption><em>Abbildung 5: Code im Debug-Modus und mit einem Breakpoint starten<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>Zugegeben, das Beispiel war sehr einfach, zeigt aber bereits, wie man eine Verbindung zwischen COM-Servern und C#-Anwendungen herstellen kann. Das ist gerade im Vorfeld von Legacy Anwendungen sehr n\u00fctzlich, zu denen es leider selten Dokumentation mit einer Erl\u00e4uterung des Vorgehens gibt.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>F\u00fcr Fragen kontaktieren Sie mich gerne unter liviu.sosu@zeiss.com. <br>Danke an Florian Seeleitner f\u00fcr seine hilfreiche Unterst\u00fctzung.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Artikel beschreibt die M\u00f6glichkeit, eine in in C# geschriebene Anwendung mit einer C++-Anwendung kommunizieren zu lassen, speziell f\u00fcr die Integration von einem C++-COM-Server mit einem C#-Client.<\/p>\n","protected":false},"author":150,"featured_media":3117,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[16],"tags":[337,366,570,694,695,696,697,698],"topics":[670],"class_list":["post-3099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dot-net","tag-editorschoice","tag-c","tag-zeiss-digital-innovation","tag-com-sever","tag-visual-studio","tag-com-server-integration","tag-c-client","tag-c-com-server","topics-smart-manufacturing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kommunikation zwischen C# und C++ - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"Dieser Artikel beschreibt eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr die Integration von einem C++-COM-Server mit einem C#-Client.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kommunikation zwischen C# und C++ - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"Dieser Artikel beschreibt eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr die Integration von einem C++-COM-Server mit einem C#-Client.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-14T08:57:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-28T08:43:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Liviu \u015eo\u015fu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:site\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Liviu \u015eo\u015fu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/\",\"name\":\"Kommunikation zwischen C# und C++ - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg\",\"datePublished\":\"2022-07-14T08:57:57+00:00\",\"dateModified\":\"2022-07-28T08:43:43+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/8d3e0cdeb45196c801dc2c97e3025ee3\"},\"description\":\"Dieser Artikel beschreibt eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr die Integration von einem C++-COM-Server mit einem C#-Client.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg\",\"width\":2560,\"height\":1440,\"caption\":\"Symbolic image: zwei H\u00e4nde an einem Tablet\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kommunikation zwischen C# und C++ \u2013 Eine Anleitung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/8d3e0cdeb45196c801dc2c97e3025ee3\",\"name\":\"Liviu \u015eo\u015fu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/sosu_liviu-150x150.png\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/sosu_liviu-150x150.png\",\"caption\":\"Liviu \u015eo\u015fu\"},\"description\":\"Liviu \u015eo\u015fu studierte Informatik und hat einen Master-Abschluss in Informationssicherheit. Er arbeitet als Softwareconsultant bei ZEISS Digital Innovation, ist zertifizierter Microsoft Certified Solutions Developer (MCSD) und im .NET-Bereich unterwegs. Liviu besch\u00e4ftigt sich mit Best Practices f\u00fcr die Webentwicklung, insbesondere f\u00fcr Back-End. Aber auch Front-End und Data Science sind f\u00fcr ihn interessant.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/liviusosu\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kommunikation zwischen C# und C++ - ZEISS Digital Innovation Blog","description":"Dieser Artikel beschreibt eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr die Integration von einem C++-COM-Server mit einem C#-Client.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/","og_locale":"de_DE","og_type":"article","og_title":"Kommunikation zwischen C# und C++ - ZEISS Digital Innovation Blog","og_description":"Dieser Artikel beschreibt eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr die Integration von einem C++-COM-Server mit einem C#-Client.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/","og_site_name":"Digital Innovation Blog","article_publisher":"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/","article_published_time":"2022-07-14T08:57:57+00:00","article_modified_time":"2022-07-28T08:43:43+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg","type":"image\/jpeg"}],"author":"Liviu \u015eo\u015fu","twitter_card":"summary_large_image","twitter_creator":"@ZEISS_di","twitter_site":"@ZEISS_di","twitter_misc":{"Verfasst von":"Liviu \u015eo\u015fu","Gesch\u00e4tzte Lesezeit":"5\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/","name":"Kommunikation zwischen C# und C++ - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg","datePublished":"2022-07-14T08:57:57+00:00","dateModified":"2022-07-28T08:43:43+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/8d3e0cdeb45196c801dc2c97e3025ee3"},"description":"Dieser Artikel beschreibt eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr die Integration von einem C++-COM-Server mit einem C#-Client.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-scaled.jpg","width":2560,"height":1440,"caption":"Symbolic image: zwei H\u00e4nde an einem Tablet"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/kommunikation-zwischen-c-und-c-eine-anleitung\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/"},{"@type":"ListItem","position":2,"name":"Kommunikation zwischen C# und C++ \u2013 Eine Anleitung"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/8d3e0cdeb45196c801dc2c97e3025ee3","name":"Liviu \u015eo\u015fu","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/sosu_liviu-150x150.png","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/sosu_liviu-150x150.png","caption":"Liviu \u015eo\u015fu"},"description":"Liviu \u015eo\u015fu studierte Informatik und hat einen Master-Abschluss in Informationssicherheit. Er arbeitet als Softwareconsultant bei ZEISS Digital Innovation, ist zertifizierter Microsoft Certified Solutions Developer (MCSD) und im .NET-Bereich unterwegs. Liviu besch\u00e4ftigt sich mit Best Practices f\u00fcr die Webentwicklung, insbesondere f\u00fcr Back-End. Aber auch Front-End und Data Science sind f\u00fcr ihn interessant.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/liviusosu\/"}]}},"author_meta":{"display_name":"Liviu \u015eo\u015fu","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/liviusosu\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server-600x338.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">.NET<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">.NET<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Editor&#039;s Choice<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">ZEISS Digital Innovation<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">COM-Sever<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Visual Studio<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">COM-Server-Integration<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">C#-Client<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">C++-COM-Server<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Editor&#039;s Choice<\/span>","<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">ZEISS Digital Innovation<\/span>","<span class=\"advgb-post-tax-term\">COM-Sever<\/span>","<span class=\"advgb-post-tax-term\">Visual Studio<\/span>","<span class=\"advgb-post-tax-term\">COM-Server-Integration<\/span>","<span class=\"advgb-post-tax-term\">C#-Client<\/span>","<span class=\"advgb-post-tax-term\">C++-COM-Server<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 4\u00a0Jahren ago","modified":"Updated 4\u00a0Jahren ago"},"absolute_dates":{"created":"Posted on Juli 14, 2022","modified":"Updated on Juli 28, 2022"},"absolute_dates_time":{"created":"Posted on Juli 14, 2022 8:57 a.m.","modified":"Updated on Juli 28, 2022 8:43 a.m."},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/3099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/users\/150"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/comments?post=3099"}],"version-history":[{"count":14,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/3099\/revisions"}],"predecessor-version":[{"id":3193,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/3099\/revisions\/3193"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media\/3117"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media?parent=3099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/categories?post=3099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/tags?post=3099"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/topics?post=3099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}