How to Interop between C# and C++

5

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?

c#
c++
.net
visual-studio
interop
asked on Stack Overflow Nov 9, 2016 by CyberFox

1 Answer

4

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

answered on Stack Overflow Nov 9, 2016 by Tinwor

User contributions licensed under CC BY-SA 3.0