none
关于vc+vb混合编程问题 RRS feed

  • 常规讨论

  • 使用vb调用vc编制的dll,vc程序中含有结构体,不知道在vb调用时该如何处理?谢谢

    补充:不含结构体的dll可以调用成功、返回正确的值,但含有结构体的一直为调试成功

    vc中函数原型为:

    struct res
    {
     double r;
     double Wc;
     double Wr;
    };
    struct res ls(double uo,double dw,double dm,double le,double Zu,double Z,double W,double ff)
    {

    2010年6月29日 1:02

全部回复

  • 麻烦咨询一下,如何将该结构体定义翻译成vb形式?
    2010年6月29日 1:36
  • 大家好!
    看了很多本论坛上的帖子,很受启发,但是关于vb调用含有多输出函数值vc dll的问题很少涉及,我在编程过程中遇到了该方面问题,解决不了,希望得到大家指点,谢谢!

    vc中cpp文件为:
    struct res
    {
    double r;
    double Wc;
    double Wr;
    };


    struct res lo(double uo,double dw,double dm)
    {
    struct res result;
    double r,Wc,Wr;

    result.r =uo;
    result.Wc=dw;
    result.Wr=dm;
    return result;

    }

    vb中代码:
    Private Type js

    x As Double

    y As Double

    z As Double

    End Type


    Private Declare Function lo Lib "sample1.dll" (ByVal uo As Double, ByVal dw As Double, ByVal dm As Double) As Double


    Private Sub Command1_Click()


    Dim n(3) As Double

    n(3) = lo(CDbl(Text1.Text), CDbl(Text2.Text), CDbl(Text3.Text))
    Text5.Text = n(0)
    Text6.Text = n(1)
    Text7.Text = n(2)
    End Sub

    其中函数为三输入三输出形式的,想实现的是将vb中三个TextBox 控件中输入的值传给vc开发的dll,通过调用lo函数返回三个结果值,谢谢!
    2010年6月30日 7:07
  • 你好!

         如果你的VC 的dll为非托管的,那个函数需要使用extern关键字暴露才可以在VB.NET中声明调用!


    周雪峰
    2010年7月1日 8:45
    版主

  • <System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)>  _
    Public Structure res
        
        '''double
        Public r As Double
        
        '''double
        Public Wc As Double
        
        '''double
        Public Wr As Double
    End Structure

    Partial Public Class NativeMethods
        
        '''Return Type: res
        '''uo: double
        '''dw: double
        '''dm: double
        '''le: double
        '''Zu: double
        '''Z: double
        '''W: double
        '''ff: double
        <System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint:="ls")>  _
        Public Shared Function ls(ByVal uo As Double, ByVal dw As Double, ByVal dm As Double, ByVal le As Double, ByVal Zu As Double, ByVal Z As Double, ByVal W As Double, ByVal ff As Double) As res
        End Function
    End Class



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年7月3日 4:57
    版主