Salve a tutti, ho un programma scritto in C. L'interfaccia di questo programma dovrà essere fatta in C#.
Per questo devo fare un dll del programma in C che verrà utilizzata dll'interfaccia scritta in C#.
I tipi del programma scritto in C sono char**, perchè il tipo string in C non esiste, e quindi durante l'importazione della dll in C# diventano **sbyte i quali sono intrattabili. Per questo ho scritto un'altra dll wrapper per quella fatta in C che trasforma il tipo charr** in string. Ma c'è un problema, il programma principale in C# chiama la dll wrapper (fin qui tutto bene) la quale chiama la dll C ma non funziona perchè non trova il punto di ingresso (l'entry point) della dll scritta in C.
Dopo varie ricerche ho visto che per far funzionare una dll scritta in C con C# bisogna fare un assembly gestito, cioè una libreria di tipo clr.
Di seguito riporto il codice delle due dll.
DLL SCRITTA IN C:
.CPP
#include "stdafx.h"
#include "GestioneVIdeoCLR.h"
namespace GestioneVIdeoCLR
{
extern "C" double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
}
.H
#pragma once
using namespace System;
namespace GestioneVIdeoCLR {
public ref class MyMathFuncs{
public:
static double Add(double a, double b);
};
}
DLL WRAPPER SCRITTA PER C#:
.CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;
using GestioneVIdeoCLR;
namespace DLLWrapper
{
public class Wrapper
{
[DllImport("GestioneVIdeoCLR.dll")]
public static extern double Add(double a, double b);
}
}
naturalmente il mio programma non è una somma, ma ho provato con questa per vedere se funziona. Se non funziona con una normale somma, figuriamoci con il programma vero che è più complesso. Utilizzo visual studio 2008.
Qualche suggerimento??? :master:
Grazie