{"id":1872,"date":"2022-07-14T08:58:00","date_gmt":"2022-07-14T08:58:00","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?p=1872"},"modified":"2022-07-28T08:43:36","modified_gmt":"2022-07-28T08:43:36","slug":"communication-between-c-and-c-a-guide","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/","title":{"rendered":"Communication between C# and C++ \u2013 A guide"},"content":{"rendered":"\n<p>If you need your application written in C# to communicate with a C++ application, perhaps to read sensor data from a hardware component, then you have several options to choose from regarding this communication. This article will look at integration as a COM server. The following will focus on a C++-based COM server from a C# client.<\/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 decoding=\"async\" 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: two hands on a tablet\" class=\"wp-image-3117\"\/><\/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\">Requirements<\/h2>\n\n\n\n<p>To follow this tutorial, you will need the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Visual Studio 2019 or a newer version<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Visual Studio profile .NET desktop development<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Visual Studio profile desktop development with C++<\/li><\/ul>\n\n\n\n<p>The profiles can be selected and installed via the Visual Studio installer.<\/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\">Step-by-step instructions: Integrating a C++ COM server with a C# client<\/h2>\n\n\n\n<p>Important: More detailed information can be found in this Github <a href=\"https:\/\/github.com\/zeiss-digital-innovation\/CppComServerCSharpInteroperability\">repository<\/a>.<\/p>\n\n\n\n<p>We will also create a C++ server:<\/p>\n\n\n\n<p>Step 1: Create a C++ ATL project with executable file (.exe) as application type.<\/p>\n\n\n\n<p>Step 2: Please delete the ComServerPS project.<\/p>\n\n\n\n<p>Step 3: Right click on the server and add a new class (ComServerMgr). This should result in the image below:<\/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\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1-1024x612.png\" alt=\"Screenshot COM server\" class=\"wp-image-1882\" width=\"768\" height=\"459\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1-1024x612.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1-600x359.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1-768x459.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1-1536x918.png 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1-640x383.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1-1200x717.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_1.png 1902w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Figure 1: Adding a new class (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>Step 4: Add the AddOne() method header in the ComServerMgr.h so that it can be inserted into the class:<\/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>Step 5: Add the AddMethod() in the ComServerMgr.cpp. We will use those later to increment the given value by one:<\/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>Step 6: Add the AddMethod() in ComServer.idl as well to make it known:<\/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\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_2-1024x503.png\" alt=\"Screenshot COM server\" class=\"wp-image-1883\" width=\"768\" height=\"377\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_2-1024x503.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_2-600x294.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_2-768x377.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_2-640x314.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_2-1200x589.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_2.png 1457w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Figure 2: AddMethod() in 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>Step 7: Build the project. Now go to the directory on the hard disk where the source code is located and select the subdirectory Build. ComServer.exe should now be located there. Now open the command prompt as administrator and enter the following command:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>ComServer.exe \/Regserver<\/em><\/p>\n\n\n\n<p>Please note that ComServer is the name of the project. If, for example, the project is called \u201cHelloWorld\u201d, then the command should read: \u201cHelloWorld.exe \/Regserver\u201d.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Now we will create the <strong>C# client<\/strong>.<\/p>\n\n\n\n<p>The process is simpler than that for the COM server:<\/p>\n\n\n\n<p>Step 1: Create a console application.<\/p>\n\n\n\n<p>Step 2: Add the COM reference.<\/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\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3-1024x277.png\" alt=\"Screenshot COM server\" class=\"wp-image-1884\" width=\"768\" height=\"208\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3-1024x277.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3-600x162.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3-768x208.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3-1536x415.png 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3-640x173.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3-1200x324.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_3.png 1917w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Figure 3: Adding the COM reference<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Step 3: Scroll down until the ComServerLib reference is visible:<\/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\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4-1024x548.png\" alt=\"Screenshot COM server\" class=\"wp-image-1885\" width=\"768\" height=\"411\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4-1024x548.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4-600x321.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4-768x411.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4-1536x821.png 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4-640x342.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4-1200x642.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_4.png 1915w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Figure 4: ComServerLib reference<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Please note that the reference is called ComServerLib because the server project is called ComServer. If, for example, the project is called \u201cHelloWorld\u201d, the reference would be HelloWorldLib.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Step 4: Add the following code that instantiates the COM server when the console application is started and then passes the number 3.<\/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>Step 5: It is also possible to run the code in debug mode and with a breakpoint to make this easier to follow. The execution will then stop at the appropriate point.<\/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\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_5.png\" alt=\"Code snippet\" class=\"wp-image-1886\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_5.png 793w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_5-600x332.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_5-768x425.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/202207_ComServer_5-640x354.png 640w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><figcaption><em>Figure 5: Running the code in debug mode and with a breakpoint<\/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\">Summary<\/h2>\n\n\n\n<p>Admittedly, the example was very simple, but it demonstrates how to establish a connection between COM servers and C# applications. This is very useful particularly prior to legacy applications, which unfortunately rarely come with any documentation explaining the procedure.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>If you have any questions, please feel free to contact me at liviu.sosu@zeiss.com. <br>Thanks to Florian Seeleitner for his helpful support.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article describes the possibility to let an application written in C# communicate with a C++ application, especially for the integration of a C++ COM server with a C# client.<\/p>\n","protected":false},"author":151,"featured_media":1875,"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":[13],"tags":[203,359,675,828,829,830,831,832],"topics":[816],"class_list":["post-1872","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dot-net","tag-editorschoice","tag-visual-studio","tag-zeiss-digital-innovation","tag-c","tag-com-sever","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>Communication between C# and C++ - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"How to let an C# application communicate with a C++ application, especially for the integration of a C++ COM server with a 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\/en\/communication-between-c-and-c-a-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Communication between C# and C++ - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"How to let an C# application communicate with a C++ application, especially for the integration of a C++ COM server with a C# client.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-14T08:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-28T08:43:36+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.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:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Liviu \u015eo\u015fu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/\",\"name\":\"Communication between C# and C++ - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server.jpg\",\"datePublished\":\"2022-07-14T08:58:00+00:00\",\"dateModified\":\"2022-07-28T08:43:36+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/07b981d533c11e1bf4d6c05a1e83e7b3\"},\"description\":\"How to let an C# application communicate with a C++ application, especially for the integration of a C++ COM server with a C# client.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server.jpg\",\"width\":2560,\"height\":1440,\"caption\":\"Symbolic image: zwei H\u00e4nde an einem Tablet\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Communication between C# and C++ \u2013 A guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/07b981d533c11e1bf4d6c05a1e83e7b3\",\"name\":\"Liviu \u015eo\u015fu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/sosu_liviu-150x150.png\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/sosu_liviu-150x150.png\",\"caption\":\"Liviu \u015eo\u015fu\"},\"description\":\"Liviu \u015eo\u015fu studied computer science and has a master's degree in information security. He works as a software consultant at ZEISS Digital Innovation, is a certified Microsoft Certified Solutions Developer (MCSD) and works in the .NET field. Liviu deals with best practices for web development, especially for back-end. But front-end and data science are also of interest to him.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enliviusoso\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Communication between C# and C++ - ZEISS Digital Innovation Blog","description":"How to let an C# application communicate with a C++ application, especially for the integration of a C++ COM server with a 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\/en\/communication-between-c-and-c-a-guide\/","og_locale":"en_US","og_type":"article","og_title":"Communication between C# and C++ - ZEISS Digital Innovation Blog","og_description":"How to let an C# application communicate with a C++ application, especially for the integration of a C++ COM server with a C# client.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/","og_site_name":"Digital Innovation Blog","article_published_time":"2022-07-14T08:58:00+00:00","article_modified_time":"2022-07-28T08:43:36+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.jpg","type":"image\/jpeg"}],"author":"Liviu \u015eo\u015fu","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Liviu \u015eo\u015fu","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/","name":"Communication between C# and C++ - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server.jpg","datePublished":"2022-07-14T08:58:00+00:00","dateModified":"2022-07-28T08:43:36+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/07b981d533c11e1bf4d6c05a1e83e7b3"},"description":"How to let an C# application communicate with a C++ application, especially for the integration of a C++ COM server with a C# client.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2022\/07\/202207_sybolic_image_COM_Server.jpg","width":2560,"height":1440,"caption":"Symbolic image: zwei H\u00e4nde an einem Tablet"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/communication-between-c-and-c-a-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/"},{"@type":"ListItem","position":2,"name":"Communication between C# and C++ \u2013 A guide"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/07b981d533c11e1bf4d6c05a1e83e7b3","name":"Liviu \u015eo\u015fu","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/sosu_liviu-150x150.png","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2022\/07\/sosu_liviu-150x150.png","caption":"Liviu \u015eo\u015fu"},"description":"Liviu \u015eo\u015fu studied computer science and has a master's degree in information security. He works as a software consultant at ZEISS Digital Innovation, is a certified Microsoft Certified Solutions Developer (MCSD) and works in the .NET field. Liviu deals with best practices for web development, especially for back-end. But front-end and data science are also of interest to him.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enliviusoso\/"}]}},"author_meta":{"display_name":"Liviu \u015eo\u015fu","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enliviusoso\/"},"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\/en\/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\/en\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Editor&#039;s Choice<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Visual Studio<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/dot-net\/\" class=\"advgb-post-tax-term\">ZEISS Digital Innovation<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/dot-net\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/dot-net\/\" class=\"advgb-post-tax-term\">COM-Sever<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/dot-net\/\" class=\"advgb-post-tax-term\">COM-Server-Integration<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/dot-net\/\" class=\"advgb-post-tax-term\">C#-Client<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/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\">Visual Studio<\/span>","<span class=\"advgb-post-tax-term\">ZEISS Digital Innovation<\/span>","<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">COM-Sever<\/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 years ago","modified":"Updated 4 years ago"},"absolute_dates":{"created":"Posted on July 14, 2022","modified":"Updated on July 28, 2022"},"absolute_dates_time":{"created":"Posted on July 14, 2022 8:58 am","modified":"Updated on July 28, 2022 8:43 am"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/1872","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/users\/151"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/comments?post=1872"}],"version-history":[{"count":8,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/1872\/revisions"}],"predecessor-version":[{"id":1888,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/1872\/revisions\/1888"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media\/1875"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media?parent=1872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/categories?post=1872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/tags?post=1872"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/topics?post=1872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}