Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C#][C] DLL in C ed entry point

    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

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    DLLImport si usa per API Native in C/C++
    Se sono fatte in C++.NET l'IDE può usare la dll direttamente.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.