VB.NET调用VC7写的dll,VC7里的函数声明怎么写?VB.NET的调用声明怎么写?

时间:2022-06-14 14:02:36
一个vc7写的dll里的一个函数,声明还是按照传统的写法:
extern "C" __declspec(dllexport) int ReportPrint
(char *Xmlfile, char *Csvfile, int PrintMode, char *PrinterName,
int *ErrCode, char *strMsg);

最后两个参数是要传回给调用的程序的,也就是调用的程序需要得到一个int型,和一个字符串。
按照上面的写法,以前用VB6的程序调用,一切正常。
现在想用VB.NET的程序来调用,就产生了两个问题:
首先,在ReportPrint函数里,定义的变量是一个CString,不知道这样能不能传回给VB.NET,而且也不知道VB.NET要怎样声明才能得到这个CString。
然后,更严重的问题,我注释了VC7和VB.NET里所有关于strMsg的代码(也就是去掉了最后一个参数),然后把ReportPrint的代码作了最简化,直接给ErrCode赋值后,就返回0。但是居然ErrCode和返回值也得不到。
ErrCode得到的总是0,而VB.NET里得到的返回值总是一个很大的乱数。
这到底怎么回事?以前的VB6的调用方法在VB.NET里都行不通了?

5 个解决方案

#1


up

#2


帮你顶

#3


上面的问题作废,看下面的

现在的VB.NET里,声明是这样的:
Declare Auto Function ReportPrint Lib "ReportPrinter.dll" Alias "ReportPrint" ( _
    ByVal strXmlFile As String, _
    ByVal strCsvFile As String, _
    ByVal lngPrintMode As Long, _
    ByVal strPrintName As String, _
    ByRef lngErrCode As Integer) As Integer

VC7里面的声明则是这样:
extern "C" __declspec(dllexport) int ReportPrint
(LPCTSTR Xmlfile, LPCTSTR Csvfile, int PrintMode, char *PrinterName,
         int *ErrCode);

现在的问题是:
1.传进去的字符串只能得到第一个字母,比如说VB.NET里我赋的值是"E:\Development\SPAL01_13.xml",到了VC7里就只能得到一个字母E。

2.返回的整型数值不对,在VC7里给ErrCode这样赋值:*ErrCode = pThread->m_nErrCode;
但是返回以后,VB.NET里的lngErrCode还是等于0。

这两个问题谁能解决?可以加分。

#4


Declare Auto Function ReportPrint Lib "ReportPrinter.dll" Alias "ReportPrint" ( _
    ByVal strXmlFile As String, _
    ByVal strCsvFile As String, _
    ByVal lngPrintMode As int32, _
    Byref strPrintName As Char(), _
    ByRef lngErrCode As int32) As Integer
用的时候,
string.tocharArray()
然后传一个引用试试
int的如果可以修改vc7的,就用值吧。
试试吧,我没法测试是否正确。

#5


关注

#1


up

#2


帮你顶

#3


上面的问题作废,看下面的

现在的VB.NET里,声明是这样的:
Declare Auto Function ReportPrint Lib "ReportPrinter.dll" Alias "ReportPrint" ( _
    ByVal strXmlFile As String, _
    ByVal strCsvFile As String, _
    ByVal lngPrintMode As Long, _
    ByVal strPrintName As String, _
    ByRef lngErrCode As Integer) As Integer

VC7里面的声明则是这样:
extern "C" __declspec(dllexport) int ReportPrint
(LPCTSTR Xmlfile, LPCTSTR Csvfile, int PrintMode, char *PrinterName,
         int *ErrCode);

现在的问题是:
1.传进去的字符串只能得到第一个字母,比如说VB.NET里我赋的值是"E:\Development\SPAL01_13.xml",到了VC7里就只能得到一个字母E。

2.返回的整型数值不对,在VC7里给ErrCode这样赋值:*ErrCode = pThread->m_nErrCode;
但是返回以后,VB.NET里的lngErrCode还是等于0。

这两个问题谁能解决?可以加分。

#4


Declare Auto Function ReportPrint Lib "ReportPrinter.dll" Alias "ReportPrint" ( _
    ByVal strXmlFile As String, _
    ByVal strCsvFile As String, _
    ByVal lngPrintMode As int32, _
    Byref strPrintName As Char(), _
    ByRef lngErrCode As int32) As Integer
用的时候,
string.tocharArray()
然后传一个引用试试
int的如果可以修改vc7的,就用值吧。
试试吧,我没法测试是否正确。

#5


关注