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

luokun 2004-12-16 09:13:25
一个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里都行不通了?
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
43720938 2005-03-24
  • 打赏
  • 举报
回复
关注
兔子-顾问 2004-12-27
  • 打赏
  • 举报
回复
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的,就用值吧。
试试吧,我没法测试是否正确。
luokun 2004-12-17
  • 打赏
  • 举报
回复
上面的问题作废,看下面的

现在的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。

这两个问题谁能解决?可以加分。
wangxt 2004-12-16
  • 打赏
  • 举报
回复
帮你顶
earlsen 2004-12-16
  • 打赏
  • 举报
回复
up

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧