2010-11-09 1 views

Antwort

2

Ich nehme an, dass Ihre C# Klasse eine statische Klasse ist. Sie müssen eine Interop-Schicht in C++/CLI erstellen, bevor Sie sie in reinem C verwenden können. Erstellen Sie eine C++/CLI Klasse, um Ihre C# Klasse zu verpacken. Sobald dies erledigt ist, verwenden Sie die Exportfunktion, um die spezifischen C Funktionen zu exportieren. C++/CLI wird die Interop in Ihrem Namen verwalten. Die Faustregel ist, wenn Sie CLI haben, wird CLI CLI sein. Ihre externen Funktionen sollten also nur native Datentypen zurückgeben.

extern "C" __declspec(dllexport) int MyFunc(long parm1); 

Hier ist ein Artikel, um Ihnen den Einstieg zu erleichtern. Es konvertiert C++ zu C# aber der Prozess ist in Ihrem Fall umgekehrt. CodeProject Leider gibt es keine bequeme umgekehrte PInvoke für reine C.

Leider bin ich nie von C# zu C gegangen. Es klingt wie ein interessantes Projekt. Viel Glück!

Ok Wenn Sie es noch nicht herausgefunden haben, habe ich eine schnelle Probe für Sie.

C# CSLibrary.Math.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace CSLibrary 
{ 
    static public class Math 
    { 
     static public int Add(int a, int b) 
     { 
      int c = a + b; 
      return c; 
     } 
    } 
} 

Cpp/C++ Projekt CPPCLibrary.h (Zusammengestellt mit C++/CLI Option mit Projektabhängigkeiten)

#pragma once 

using namespace System; 

extern "C" __declspec(dllexport) int MathAdd(int a, int b) 
{ 
    return CSLibrary::Math::Add(a, b); 
} 

C Projekt CTest .c (Zusammengestellt als C-Code)

#include "stdafx.h" 
#pragma comment(lib, "../Debug/CPPCLILibrary.lib") 

extern __declspec(dllimport) int MathAdd(int a, int b); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int answer = MathAdd(10, 32); 
    _tprintf(_T("%d\n"), answer); 
    return 0; 
} 

Alle Dateien befinden sich in derselben Lösung, aber in unterschiedlichen Projekten. Ich habe bestätigt, dass das funktioniert hat. Ich hoffe, das hilft jedem, der darauf stößt.

Prost!

+0

Wenn ich etwas Zeit bekomme, würde ich gerne eine kleine Demo erstellen. Das klingt lustig. –

0

Wenn der Code reines C ist, können Sie es möglicherweise in ein visuelles C++ einfügen Montageprojekt ohne zu große Schwierigkeiten. Von dort aus hätten Sie Zugang zu einer regulären .net API.

Verwandte Themen