none
VB调用C dll函数只能返回整形不能返回字符串的问题 RRS feed

  • 问题

  • command.h

    #ifdef COMMAND_EXPORTS
    #define COMMAND_API __declspec(dllexport)
    #else
    #define COMMAND_API __declspec(dllimport)
    #endif

    // 此类是从 command.dll 导出的
    class COMMAND_API Ccommand {
    public:
    Ccommand(void);
    // TODO:  在此添加您的方法。
    };

    extern "C" COMMAND_API char ncommand;

    extern "C" COMMAND_API char fncommand(void);

    // command.cpp : 定义 DLL 应用程序的导出函数。
    //

    command.cpp

    #include "stdafx.h"
    #include "command.h"


    // 这是导出变量的一个示例
    COMMAND_API char ncommand;

    // 这是导出函数的一个示例。
    COMMAND_API char fncommand(void)
    {

    char ncommand = "Hi!";

    return ncommand;
    }

    // 这是已导出类的构造函数。
    // 有关类定义的信息,请参阅 command.h
    Ccommand::Ccommand()
    {
    return;
    }

    VB中链接dll的代码是

    Declare Auto Function fncommand Lib "command.dll" _
               () As String

    VB按钮中的代码是

    TextBox1.Text = Win32.fncommand()

    如果把Declare Auto Function fncommand Lib "command.dll" _
               () As String中的String改为IntPtr,command.cpp函数中的删除改为return 42,可以在TextBox1显示42,但是原来的确不能正确返回字符串,请教高手这是怎么回事啊?


    • 已移动 Caillen 2014年6月17日 7:25
    2014年6月16日 11:30

答案

  • Hi,

    这是因为C 和VB.NET 采用不同的字符编码格式,你可以用以下文档中分享的方式来处理C 和VB.NET 间传递字符串的问题。

    http://support.microsoft.com/kb/187912/zh-cn

     

    使用 Visual Basic 创建的 C 动态链接库 (DLL),时,一定要记住 C 和 Visual Basic 以不同的方式将字符串。必须采取所有的预防措施,以确保所有字符串被都传递正确 ;否则,可能会出现致命错误。这篇文章将介绍如何编写一个 C DLL,它接受一个字符串作为参数的函数,以及如何从 Visual Basic 应用程序中调用导出的函数。

    Regards.


    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月17日 7:42
    版主

全部回复

  • 你好:

    我将你的问题移至VB论坛以获取更多人的帮助。


    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月17日 7:29
  • Hi,

    这是因为C 和VB.NET 采用不同的字符编码格式,你可以用以下文档中分享的方式来处理C 和VB.NET 间传递字符串的问题。

    http://support.microsoft.com/kb/187912/zh-cn

     

    使用 Visual Basic 创建的 C 动态链接库 (DLL),时,一定要记住 C 和 Visual Basic 以不同的方式将字符串。必须采取所有的预防措施,以确保所有字符串被都传递正确 ;否则,可能会出现致命错误。这篇文章将介绍如何编写一个 C DLL,它接受一个字符串作为参数的函数,以及如何从 Visual Basic 应用程序中调用导出的函数。

    Regards.


    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月17日 7:42
    版主