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。
这两个问题谁能解决?可以加分。
现在的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的,就用值吧。
试试吧,我没法测试是否正确。
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。
这两个问题谁能解决?可以加分。
现在的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的,就用值吧。
试试吧,我没法测试是否正确。
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
关注