DLL函数适用于VB6而不是VB.NET - HELP! [英] DLL function works from VB6 and not from VB.NET - HELP!

查看:80
本文介绍了DLL函数适用于VB6而不是VB.NET - HELP!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,


我们目前正在使用一个用户DLL,当在VB 6.0中工作时,用户将

定义类型作为参数。


现在我们正在尝试使用来自vb.net应用程序的相同DLL并且

有一些问题让它工作,我们不知道为什么。基本上

函数接受参数,然后返回错误并且

从不执行更新。


下面你会找到VB6 dll函数和用户定义类型

定义,然后是我们正在使用的VB.NET(2003版)dll函数和结构

定义。不幸的是我没有这个DLL的源代码,所以我不知道那里的字段是如何定义的。


有人能说出来吗我可能被错误地定义了,或者我怎么能弄清楚

为什么呼叫不起作用?另外,我尝试了各种类型的

UnmanagedType。< string type>在结构内的定义中(即

LPSTR等)


其中一个应该有用,不应该吗?还有什么可以发生?


任何帮助都将不胜感激!


吉姆


= ===开始VB 6 dll函数和类型定义===

声明函数AddSalesOrderLineItem Lib" MAXORDR2.DLL" (ByVal OH As Long,

Soedet As SOEDetItem)作为整数


类型SODetail

ORDNUM28 As String * 6''String

LINNUM28 As String * 2''String

DELNUM28 As String * 2''String

STATUS28 As String * 1''String

CUSTID28 As String * 7''String

PRTNUM28 As String * 15''String

EDILIN28 As String * 6''String

TAXABL28 As String * 1''String

GLXREF28 As String * 32''String

CURDUE28 As''Btrieve Date

FILL0128 As String * 2''String

ORGDUE28 As''Btrieve Date

FILL0228 As String * 2''String

CUSDUE28 As长'Btrieve日期

FILL0328字符串* 2''字符串

SHPDTE28长期''Btrieve日期

FILL0428字符串* 2' 'String

SLSUOM28 As String * 2''String

RE FRNC28 As String * 25''String

PRICE28 As Double''IEEE Float

ORGQTY28 As Double''IEEE Float

CURQTY28 As Double' 'IEEE Float

BCKQTY28 As Double''IEEE Float

SHPQTY28 As Double''IEEE Float

CURSHP28 As Double''IEEE Float

DUEQTY28 As Double''IEEE Float

INVQTY28 As Double''IEEE Float

DISC28 As Single''IEEE Float

STYPE28 As String * 2''String

PRNT28 As String * 1''String

AKPRNT28 As String * 1''String

STK28 As String * 8''String

COCFLG28 As String * 3''String

FORCUR28 As Double''IEEE Float

HSTAT28 As String * 1''字符串

SLSREP28字符串* 7''字符串

COMMIS28单个''IEEE Float

DRPSHP28字符串* 10''字符串

QUMQTY28作为Sing le''IEEE Float

TAXCDE128 As String * 7''String

TAX128 As Double''IEEE Float

TAXCDE228 As String * 7' 'String

TAX228 As Double''IEEE Float

TAXCDE328 As String * 7''String

TAX328 As Double''IEEE Float

MCOMP28 As String * 3''字符串

MSITE28 As String * 3''字符串

UDFKEY28字符串* 15''字符串

UDFREF28 As String * 25''String

DEXPFLG28 As String * 1''String(adChar)

FILLER28 As String * 24''String

结束类型

====== END VB 6类型定义

======开始VB.NET DLL函数和结构定义= ======

声明函数AddSalesOrderLineItem Lib" MAXORDR2.DLL" (ByVal OH As

Int32,ByRef Soedet As SOEDetItem)As Short


< StructLayout(LayoutKind.Sequential,CharSet:= CharSet.Ansi)> _

公共结构SOEDetItem

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 6)>公共ORDNUM As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)>公共LINNUM As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)> Public DelNum As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 1)>公共状态为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 7)> Public CUSTID As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 15)>公共PRTNUM As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 6)>公共EDILIN As

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 1)> Public TAXABL As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 32)>公共GLXREF As

字符串

公共CURDUE为Int32

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)> Public FILL01 As

String

Public ORGDUE As Int32

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)> Public FILL02 As

String

Public CUSDUE As Int32

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)> Public FILL03 As

String

Public SHPDTE As Int32

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)> Public FILL04 As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)> Public SLSUOM As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 25)>公共REFRNC为

字符串

公共价格为双倍

公共ORGQTY为双倍

公共CURQTY为Double

Public BCKQTY As Double

公共SHPQTY双倍

公共CURSHP双倍

公共DUEQTY双倍

Public INVQTY As Double

Public DISC As Single

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 2)>公共STYPE为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 1)>公共PRNT为字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 1)>公共AKPRNT As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 8)> Public STK As String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 3)>公共COCFLG As

String

Public FORCUR As Double

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 1)>公共HSTAT为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 7)>公共SLSREP为

字符串

公共COMMIS为单一

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 10)>公共DRPSHP为

字符串

公共QUMQTY单身

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 7)>公共TAXCDE1为

字符串

公共TAX1为双倍''#TAX AMOUNT 1

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 7 )> Public TAXCDE2 As

String

Public TAX2 As Double

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 7)>公共TAXCDE3为

字符串

公共TAX3为双倍''$ TAX AMOUNT 3

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 3 )>公共MCOMP为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 3)>公共MSITE为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 15)>公共UDFKEY为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 25)> Public UDFREF As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 1)>公共DEXPFLG As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 25)> Public FILLER As

String

结束结构

====结束vb.net结构定义======

Hello,

We are currently using a user DLL that when working in VB 6.0 has a user
defined type as a parameter.

Now we are trying to use the same DLL from a vb.net application and are
having some problems getting it to work and we don''t know why. Basically
the function is accepting the parameters, and then returning an error and
never performing the update.

Below you will find both the VB6 dll function and user defined type
definition, followed by the VB.NET (2003 version) dll function and structure
definition that we are using. Unfortunately I do not have the source code to
the DLL, so I don''t know how the fields are defined in there.

Can someone tell me what may be defined incorrectly, or how I can figure out
why the call is not working? Also, I have tried every type of
UnmanagedType.<string type> in the definitions within the structure (i.e.
LPSTR, etc)

One of these should work, shouldn''t they? What else could be happening?

Any help would be appreciated!

Jim

==== Begin VB 6 dll function and type definition ===
Declare Function AddSalesOrderLineItem Lib "MAXORDR2.DLL" (ByVal OH As Long,
Soedet As SOEDetItem) As Integer

Type SODetail
ORDNUM28 As String * 6 '' String
LINNUM28 As String * 2 '' String
DELNUM28 As String * 2 '' String
STATUS28 As String * 1 '' String
CUSTID28 As String * 7 '' String
PRTNUM28 As String * 15 '' String
EDILIN28 As String * 6 '' String
TAXABL28 As String * 1 '' String
GLXREF28 As String * 32 '' String
CURDUE28 As Long '' Btrieve Date
FILL0128 As String * 2 '' String
ORGDUE28 As Long '' Btrieve Date
FILL0228 As String * 2 '' String
CUSDUE28 As Long '' Btrieve Date
FILL0328 As String * 2 '' String
SHPDTE28 As Long '' Btrieve Date
FILL0428 As String * 2 '' String
SLSUOM28 As String * 2 '' String
REFRNC28 As String * 25 '' String
PRICE28 As Double '' IEEE Float
ORGQTY28 As Double '' IEEE Float
CURQTY28 As Double '' IEEE Float
BCKQTY28 As Double '' IEEE Float
SHPQTY28 As Double '' IEEE Float
CURSHP28 As Double '' IEEE Float
DUEQTY28 As Double '' IEEE Float
INVQTY28 As Double '' IEEE Float
DISC28 As Single '' IEEE Float
STYPE28 As String * 2 '' String
PRNT28 As String * 1 '' String
AKPRNT28 As String * 1 '' String
STK28 As String * 8 '' String
COCFLG28 As String * 3 '' String
FORCUR28 As Double '' IEEE Float
HSTAT28 As String * 1 '' String
SLSREP28 As String * 7 '' String
COMMIS28 As Single '' IEEE Float
DRPSHP28 As String * 10 '' String
QUMQTY28 As Single '' IEEE Float
TAXCDE128 As String * 7 '' String
TAX128 As Double '' IEEE Float
TAXCDE228 As String * 7 '' String
TAX228 As Double '' IEEE Float
TAXCDE328 As String * 7 '' String
TAX328 As Double '' IEEE Float
MCOMP28 As String * 3 '' String
MSITE28 As String * 3 '' String
UDFKEY28 As String * 15 '' String
UDFREF28 As String * 25 '' String
DEXPFLG28 As String * 1 '' String (adChar)
FILLER28 As String * 24 '' String
End Type
====== END VB 6 Type definition
====== Begin VB.NET DLL function and Structure Definition =======
Declare Function AddSalesOrderLineItem Lib "MAXORDR2.DLL" (ByVal OH As
Int32, ByRef Soedet As SOEDetItem) As Short

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure SOEDetItem
<MarshalAs(UnmanagedType.LPStr, SizeConst:=6)> Public ORDNUM As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public LINNUM As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public DelNum As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=1)> Public STATUS As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=7)> Public CUSTID As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=15)> Public PRTNUM As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=6)> Public EDILIN As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=1)> Public TAXABL As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=32)> Public GLXREF As
String
Public CURDUE As Int32
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public FILL01 As
String
Public ORGDUE As Int32
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public FILL02 As
String
Public CUSDUE As Int32
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public FILL03 As
String
Public SHPDTE As Int32
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public FILL04 As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public SLSUOM As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=25)> Public REFRNC As
String
Public PRICE As Double
Public ORGQTY As Double
Public CURQTY As Double
Public BCKQTY As Double
Public SHPQTY As Double
Public CURSHP As Double
Public DUEQTY As Double
Public INVQTY As Double
Public DISC As Single
<MarshalAs(UnmanagedType.LPStr, SizeConst:=2)> Public STYPE As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=1)> Public PRNT As String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=1)> Public AKPRNT As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=8)> Public STK As String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=3)> Public COCFLG As
String
Public FORCUR As Double
<MarshalAs(UnmanagedType.LPStr, SizeConst:=1)> Public HSTAT As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=7)> Public SLSREP As
String
Public COMMIS As Single
<MarshalAs(UnmanagedType.LPStr, SizeConst:=10)> Public DRPSHP As
String
Public QUMQTY As Single
<MarshalAs(UnmanagedType.LPStr, SizeConst:=7)> Public TAXCDE1 As
String
Public TAX1 As Double ''# TAX AMOUNT 1
<MarshalAs(UnmanagedType.LPStr, SizeConst:=7)> Public TAXCDE2 As
String
Public TAX2 As Double
<MarshalAs(UnmanagedType.LPStr, SizeConst:=7)> Public TAXCDE3 As
String
Public TAX3 As Double ''$ TAX AMOUNT 3
<MarshalAs(UnmanagedType.LPStr, SizeConst:=3)> Public MCOMP As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=3)> Public MSITE As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=15)> Public UDFKEY As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=25)> Public UDFREF As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=1)> Public DEXPFLG As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=25)> Public FILLER As
String
End Structure
==== End vb.net struct definition ======

推荐答案

TAX AMOUNT 3

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 3)>公共MCOMP为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 3)>公共MSITE为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 15)>公共UDFKEY为

字符串

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 25)> Public UDFREF As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 1)>公共DEXPFLG As

String

< MarshalAs(UnmanagedType.LPStr,SizeConst:= 25)> Public FILLER As

String

结束结构

====结束vb.net结构定义======
TAX AMOUNT 3
<MarshalAs(UnmanagedType.LPStr, SizeConst:=3)> Public MCOMP As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=3)> Public MSITE As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=15)> Public UDFKEY As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=25)> Public UDFREF As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=1)> Public DEXPFLG As
String
<MarshalAs(UnmanagedType.LPStr, SizeConst:=25)> Public FILLER As
String
End Structure
==== End vb.net struct definition ======


James,
James,
有人可以告诉我什么可能被错误定义,或者我怎么能弄明白为什么这个电话不是工作?另外,我尝试了各种类型的UnmanagedType。< string type>在结构中的定义(即LPSTR等)
Can someone tell me what may be defined incorrectly, or how I can figure out
why the call is not working? Also, I have tried every type of
UnmanagedType.<string type> in the definitions within the structure (i.e.
LPSTR, etc)




包括ByValTStr?那是你应该使用的那个。


Mattias


-

Mattias Sj?gren [ MVP] mattias @ mvps.org
http://www.msjogren.net/ dotnet /

请回复新闻组。



Including ByValTStr? That''s the one you should use.

Mattias

--
Mattias Sj?gren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/
Please reply only to the newsgroup.


Matthias,

是的我也试过了......


Jim


" Mattias Sj?gren" <毫安******************** @ mvps.org>在消息中写道

新闻:%2 *************** @ TK2MSFTNGP10.phx.gbl ...
Matthias,

Yes I tried that one too...

Jim

"Mattias Sj?gren" <ma********************@mvps.org> wrote in message
news:%2***************@TK2MSFTNGP10.phx.gbl...
James,
James,
有人能告诉我什么可能被错误地定义,或者我怎么能算出
,为什么这个电话不能正常工作?另外,我尝试了各种类型的UnmanagedType。< string type>在结构内的定义(即LPSTR等)
Can someone tell me what may be defined incorrectly, or how I can figure outwhy the call is not working? Also, I have tried every type of
UnmanagedType.<string type> in the definitions within the structure (i.e.
LPSTR, etc)



包括ByValTStr?那是你应该使用的那个。

Mattias

-
Mattias Sj?gren [MVP] mattias @ mvps.org
< a rel =nofollowhref =http://www.msjogren.net/dotnet/target =_ blank> http://www.msjogren.net/dotnet/
请回复仅限新闻组。



Including ByValTStr? That''s the one you should use.

Mattias

--
Mattias Sj?gren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/
Please reply only to the newsgroup.



这篇关于DLL函数适用于VB6而不是VB.NET - HELP!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆