2011-07-02 2 views
0

J'appelle un fichier dll de WinForm à C#c utilisation dll au C# projets

Mon dll est censé afficher une fenêtre de console et obtenir un numéro qui sera transféré à C# WinForm, et il ne fonctionne pas .

Si je veux une DLL pour retourner une valeur cela fonctionne.

Alors, comment puis-je faire mon travail dll avec des commandes comme printf ou scanf, etc.

// mydll.cpp : Defines the exported functions for the DLL application. 
// 

//#include "stdafx.h" 
#include<stdio.h> 
//#define dll 
    extern "C"{ __declspec(dllexport)int backnum() 

    { 

    int chek=0,Size=1; 
    printf("Hello please enter a Size for Array max size is 100 \n"); 

    scanf("%d",&Size); 


    return Size; 
    } 

} 
+0

Ce que tu fais pour en savoir plus sur p/invoquer, ou faire vous pensez que c'est la meilleure façon de résoudre un problème? .NET fournit la classe Console qui vous permet de faire ce genre de choses depuis l'intérieur de C#. –

+0

cela ressemble à un design de l'interface utilisateur absolument terrible, pourquoi invoquer une fenêtre de commande ET un GUI? Tu ne peux pas utiliser une zone de texte? Ou utilisez un sous-processus pour parler à cmd.exe? – IanNorton

Répondre

1

Mon dll est censé afficher une fenêtre de console

Quel est le hic, vous ne créez pas de fenêtre de console et il n'y en a pas dans une application Winforms. Une solution de contournement simple consiste à cliquer avec le bouton droit sur votre projet Winforms dans la fenêtre de l'Explorateur de solutions, dans l'onglet Propriétés, Application et à changer le type de sortie en "Application console". Maintenant, vous obtenez à la fois une fenêtre de console et vos fenêtres de formulaire régulières. Ou vous pouvez appeler ou pinvoke AllocConsole().

Cependant, vous allez devoir faire face à d'autres problèmes. Il y a un problème d'ordre Z, est-ce que la fenêtre de la console devrait être devant ou derrière l'interface graphique habituelle? Si vous épinglez votre fonction depuis le fil principal, votre interface graphique se bloquera. Considère que cela n'a peut-être pas trop de sens d'avoir les deux. Pas à l'utilisateur typique de toute façon.

0

Mon dll est censé afficher une fenêtre de console et obtenir un numéro qui sera transféré à C# WinForm

Si tel est une exigence, vous êtes .dll doit faire deux choses:

  1. Définir une API afin que le C appel # sera en mesure de relire votre numéro (par exemple, en tant que valeur de retour, ou en tant que paramètre # C « out »)

  2. Utilisez le AllocConsole Win32() etc API pour créer une fenêtre de console

Comment puis-je faire mon travail dll avec des commandes comme printf ou scanf, etc?

Assurez-vous d'inclure la bibliothèque d'exécution MSVC correcte .dll où vous installez/exécuter votre programme (par exemple, télécharger le redistribuable Visual C++)