Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Interop between C# and C++

I'm attempting a very basic interoperation between the 2 languages. I basically have some performance intensive code I wanna handle in C++ and then get the result back to my application.

All is going to be compiled in Visual Studio.

i have chosen int to be the input and output type since marshalling can be a bit wonky and not really what i'm dealing with.

C++ i have:

#include "stdafx.h" // default from vs2013, no idea what it is

_declspec(dllexport) int Diu(int p) {
    return p * 2;
}

C# i have:

using System;

namespace Interop {
    public class Program{
        [System.Runtime.InteropServices.DllImport("Hardworker.dll")]
        public static extern int Diu(int p);

        private static void Main(string[] args) {
            Console.WriteLine(Diu(2));
        }
    }
}

So it's a pretty basic example. But I'm getting the exception:

An unhandled exception of type 'System.BadImageFormatException' occurred in Interop.exe

Additional information: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

The C++ project is created as a Console Application > Dll in the create dialog. I checked the C++ dll in the disassembler and i can see a Diu as an exported symbol.

Uh. What did I miss about the setting up interop?

like image 774
CyberFox Avatar asked Nov 09 '16 09:11

CyberFox


1 Answers

When you get this error: HRESULT: 0x8007000B is caused by platform incompatibility.
Check that that your compiler profile are set to the same platform(x86, x64 or AnyCPU).

like image 187
Tinwor Avatar answered Oct 07 '22 19:10

Tinwor