all groups > dotnet interop > july 2007 >
You're in the

dotnet interop

group:

Tlbimp: unexpected conversion of SAFEARRAY in structure


Tlbimp: unexpected conversion of SAFEARRAY in structure Armin Zingler
7/19/2007 1:00:30 AM
dotnet interop:
Hi, (.Net 2.0)

an AX-DLL written in VB6 is imported by tlbimp.

VB6 code:

Public Type SAKomplexRecord
....
End Type

Public Type SAKomplex
Records() As SAKomplexRecord
End Type


IDL: (from original VB6 DLL)
typedef [uuid(.....), version(1.0)]
struct tagSAKomplex {
[helpstring("Records")
]
SAFEARRAY(SAKomplexRecord) Records;
} SAKomplex;


typedef [uuid(.....), version(1.0)]
struct tagSAKomplexRecord {
.....
} SAKomplexRecord;


Problem:
In VB.Net, referencing the imported file, the declaration of
SAKomplex.Records is
"Public Records As System.Array".
I expect it to be
"Public Records() As Projectname.SAKomplexRecord".

Why is this? In the same library, there is another structure containing an
array of structures. There it works.


Armin
Re: Tlbimp: unexpected conversion of SAFEARRAY in structure Armin Zingler
7/19/2007 2:01:50 AM
"Armin Zingler" <az.nospam@freenet.de> schrieb
[quoted text, click to view]

I assumed that the Upgrade wizard that converts a VB6 project to VB.Net,
internally only calls tlbimp.exe. That's why I asked for tlbimp.exe. In
reality, I used the upgrade wizard (and not tlbimp), which obviously
internally uses "/sysarray" to create the interop assemblies.

If I manually call tlbimp.exe, the result is fine, so this problem is
solved. Anyway thx for reading.


Armin
AddThis Social Bookmark Button