Ok, eve ga
Prikacen je solution sa tri projekta:
- FirstManagedVB sa datom klasom, cist managed code
- SecondNativeWrapper - pomenuti wrapper koji marshaluje pozive od native pozivara u gornju managed klasu
- ThirdNativeCaller - mala C++ aplikacija, Win32 native koja se kaci na SecondNativeWrapper.dll i poziva Add(int, int)
Ako se pogleda exports sekcija SecondNativeWrapper.dll vidi se da ima native export iako je managed C++
[att_img]
Dumpbin prijavljuje export u SecondNativeWrapper.dll:
Code:
C:\Projects\NativeSolution\Debug>dumpbin SecondNativeWrapper.dll /exports
File Type: DLL
Section contains the following exports for SecondNativeWrapper.dll
00000000 characteristics
47CB0662 time date stamp Sun Mar 02 20:56:18 2008
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001020 _Add@8 = _Add@8
Dumpbin prijavljuje taj export kao import za ThirdNativeCaller.exe
Code:
C:\Projects\NativeSolution\Debug>dumpbin ThirdNativeCaller.exe /imports
File Type: EXECUTABLE IMAGE
Section contains the following imports:
SecondNativeWrapper.dll
418350 Import Address Table
4181B8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
0 _Add@8
Kad pozoves Win32 aplikaciju, ona lepo podigne wrapper, koji podigne .NET klasu i sabere brojeve:
Code:
C:\Projects\NativeSolution\Debug>ThirdNativeCaller.exe
Prvi broj: 12
Drugi broj: 23
Rezultat sabiranja je 35
voila..