2010-02-08 4 views

Répondre

2

Si vous voulez vraiment tout faire à travers les API C et faire un tour en COM et C++, vous pouvez faire ce qui suit. Mais commencez par comprendre si c'est vraiment nécessaire! Je soupçonne que dans la plupart des cas ce ne sera pas le cas.

Étape 1. Créez l'assemblage C# .Net que vous souhaitez appeler. Étape 2. Créez un ensemble CLI/C++ en mode mixte avec les fonctions externes «C» exportées. Demandez à cet assembly d'appeler l'assembly C $.

Étape 3. Créez votre application C qui appelle les fonctions de style C exportées de la DLL faite à l'étape 2.

choses à considérer. A. Existe-t-il un BESOIN pour qu'une application C (par rapport à C++/COM) appelle directement un assemblage .Net? En d'autres termes, pourquoi ne pas utiliser les méthodes .NET exportées C++ et COM vers COM si vous devez vraiment avoir une application/un système mixte (.Net et non.Net)? B. Les API que vous écrivez seront-elles des wrappers sur les classes? Si oui, comment allez-vous gérer leurs temps de vie? (par exemple, créerez-vous/utiliserez-vous des poignées? Comment allez-vous gérer leurs relations avec les objets gc réels ... etc)

C. Cordes. Ceux-ci sont gérés très différents entre C et .Net. Assurez-vous de connaître leurs différences et d'envoyer correctement les chaînes à travers ces limites ... Astuce: CString est votre ami.

0

Vous pouvez transformer le code C# en COM ou utiliser C++ \ CLI.

0

Voici une solution. Il met en œuvre [dllexport] attribut https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

Alors on peut faire quelque chose comme ceci pour appeler le code managé de code non managé:

code C#

class Test 
{ 
    [DllExport("add", CallingConvention = CallingConvention.StdCall)] 
    public static int Add(int left, int right) 
    { 
     return left + right; 
    } 
} 

code C

int main() 
{ 
     int z = add(5,10); 
     printf("The solution is found!!! Z is %i",z); 
     return 0; 
} 
Questions connexes