You can see how InstallShield make their so called "Standard" dll. Your DLL function is a parameter of DLLWRAP.DLL
The reason I wanted you to look carefully at the tables is that I had seen InstallShield mess up the binary table in the past. (When I was experimenting with the options).
Presumably the call to the other CA produces
Type 65
Source DDLWRAP.DLL
Target: DLL3
EntryPoint DLL3
Type 64
Source NewBinary19
Target void MyDLL::Func2(...)
Are you sure you have not made a trivial typing error or perhaps you have not exported the second function. Make sure capitilisation is consistant.
Now what should be happening.
Do Action
- Msi copies MSI1234.TMP from binary table key DLLWRAP.DLL
- This calls UNIT _stdcall DLL2(MSIHANDLE);
- DLL2 looks up DLL2 in ISDLLWrapperTable.
- DLL2 copies MyDLL.DLL out of NewBinary19 overwriting any version previously stored in %TEMP%
- DLL2 calls Func in MyDLL
- DLL2 ignores the return code (64)
- DLL2 deletes MyDLL.DLL
- DLL2 returns success
- Msi Ignores return code.
DoAction
--
- Msi copies MSI4321.TMP from binary table key DLLWRAP.DLL
- This calls UNIT _stdcall DLL3(MSIHANDLE);
- DLL3 looks up DLL3 in ISDLLWrapperTable.
- DLL3 copies MyDLL.DLL out of NewBinary19 overwriting any version previously stored in %TEMP%
- DLL3 calls Func in MyDLL but can not find it.
I can not see why. sorry.