2011-07-02 63 views
0

我打电话从WinForm的在C#中的DLL文件C DLL使用

我的DLL是为了显示控制台窗口,并得到将被转移回C#的winform一个数字,这是行不通的。

如果我想要一个DLL来返回它的工作价值。

那么,如何才能让我有像printfscanf命令DLL工作等

// 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

你这样做是为了了解的P/Invoke,或做你认为这是解决一些问题的最好方法吗? .NET提供了Console类,它允许你在C#中做这样的事情。 –

+0

这听起来像是一个非常糟糕的UI设计,为什么调用一个命令窗口和一个GUI?你不能只使用文本框吗?或者使用一个子进程与cmd.exe交谈? – IanNorton

回答

1

我的DLL是为了显示控制台窗口

这是致命的问题,您不会创建控制台窗口,并且Winforms应用程序中没有任何窗口。一个简单的解决方法是在解决方案资源管理器窗口中的属性,应用程序选项卡上右键单击您的Winforms项目,然后将输出类型更改为“控制台应用程序”。现在,您可以同时获得控制台窗口和常规窗体。或者您可以拨打或拨打AllocConsole()。

但是,当你这样做时,你会遇到其他问题。如果控制台窗口在普通GUI的前面或后面,有一个Z顺序问题?如果你从主线程唤起你的功能,那么你的GUI将会冻结。请考虑可能两者都没有太大的意义。无论如何,不​​是典型的用户。

0

我的DLL是为了显示控制台窗口,并得到将要调回C#的winform

的数字。如果这确实是一个要求,你必须.dll文件做两件事情:

  1. 定义的API,使得C#调用就可以读回你的电话号码(例如,作为返回值,或为C#“out”参数)

  2. 使用Win32 AllocConsole()等API来创建一个控制台窗口

我怎样才能让我的如printf或scanf等命令DLL的工作?

确保您有正确的MSVC运行时库.dll文件,无论你安装/运行您的程序(例如,下载的Visual C++可再发行)