我在c#
从winform调用一个dll文件我的dll应该显示一个控制台窗口并获取一个将被转移回c#winform的号码,但它不起作用。
如果我想要一个dll返回一个有效的值。
那么如何使用printf
或scanf
等命令使我的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 :(得分:1)
我的dll应该显示一个控制台窗口
哪个是摩擦,你没有创建一个控制台窗口,而且Winforms应用程序中没有。一个简单的解决方法是在Solution Explorer窗口的Properties,Application选项卡中右键单击Winforms项目,并将Output type更改为“Console Application”。现在,您将获得一个控制台窗口和常规窗体窗口。或者你可以打电话或拨打AllocConsole()。
然而,当你这样做时,你将会遇到其他问题。如果控制台窗口位于常规GUI的前面或后面,那么会出现Z顺序问题吗?如果你从主线程中解锁你的函数,那么你的GUI就会冻结。考虑一下,两者兼而有之可能没有多大意义。不管怎么说都不是典型的用户。
答案 1 :(得分:0)
我的dll应该显示一个控制台窗口,并获得一个将被转移回c#winform的号码
如果这确实是一项要求,那么你必须做两件事:
定义API,以便C#调用能够回读您的号码(例如,作为返回值,或作为C#“out”参数)
使用Win32 AllocConsole()等API创建控制台窗口
如何使用printf或scanf等命令使我的dll工作?
确保在安装/运行程序的任何位置包含正确的MSVC运行时库.dll(例如,下载Visual C ++ Redistributable)