2011-07-02 92 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++可再發行)