none
C#调用C++ DLL无法获得DLL的输出,求解 RRS feed

  • 问题

  • 问题是这样的:

    1. 客户提供一个C++写的DLL,run()的时候会printf出一些信息到控制台,来显示现在的进度状况。。。这个DLL代码无法修改。

    2. C#写了一个界面,调用DllImport DLL,想通过控制台获得DLL的输出。

    3. 目前使用输出流重定向来读取,大概如下:

    StringBuilder a = new StringBuilder();
    StringWriter b = new StringWriter(a);
    Console.SetOut(b);

    但是在调试的时候,DLL的printf输出依然出现在VS2012的输出窗口,a里面没有得到任何的值。

    而我自己写的Console.out.write("xxxxx"),却可以通过上面代码读出来。。。

    请问这是怎么回事。。。另外,如果执行dll是使用新的线程,是否有影响。

    2014年6月13日 8:06

答案

  • Hi,

    以我的理解DLL是一个不会独立运行的程序库,以下是DLL的解释:

    什么是 DLL? http://support.microsoft.com/kb/815065/zh-cn

    何谓DLL文件? http://zhidao.baidu.com/question/12995236.html

    我看到你的描述里有DllImport DLL但是请问你的DLL中怎么写的值以及他用的什么函数来输出一个你想要的值?

    在我看来你需要做的事调用DLL中的函数来输出你要的值然后转储到你的自己的变量当中,跟你的那一段单独的代码没有看到有什么关系。而且执行DLL意味着LoadDll,加载类库应该在你提到的程序里面起不到关键性的作用,我觉得不会涉及到线程之类的问题。建议你更详细的描述一下你的代码的情况已经DLL的情况在分析这个问题。



    Barry Wang
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年6月16日 5:47
    版主