Support Statement: Setting Up IDFs
Question: In a recent translation experiment, I ran the gmStudio Wizard on a large portfolio of 104 VB6 projects. The one-page "Metrics Summary Report" says the following:
Build Type = [OleDll=41; Control=29; Exe=24; OleExe=2]
namely, the migration project contains 96 projects (24 Exes, 2 OleExes, 29 Controls, and 41 OleDlls). Where are the metrics for the other 8 projects (104 - 96 = 8)?
Answer: The missing 8 projects didn't go through the Wizard correctly, because some of them appear to be left-over test codes (suspiciously named "Project1") or codes that are not well formed even for the VB6 Compiler. Also, some of the VBPs show translation errors, which may be caused by incomplete or not well-formed IDFs (Interface Description Files) for the many externals that your VBPs depend upon for compilation, and ultimately for running – let alone running correctly.
For creating "valid" IDFs, I recommend you run through the preparation steps one more time in “workbench mode” (i.e., using controls on the gmStudio Main Form, not just the Wizard)
- Open your upgrade project in gmStudio
- Use the context menu on the upgrade tasks list (Listview at top of the form) to select all tasks (i.e. all VBPs)
- With all tasks selected, click [
Tools \Author Interface Descriptions
] from the Main Menu
That will run for a while depending on your machine – 2-5 minutes I suspect. It will scan all VBPs, generate IDFs, and re-validate the VBPs - Next, sort the tasks on “
Dependency Status
” and locate the ones withDependencyStatus == ”~IDF”
- For each task with
DependencyStatus == ”~IDF”
- Click the
References
tab in the bottom of the Main Form - For each COM references that indicates NOT FOUND,
- Click [
Tools \Author Interface Descriptions…
] from the Main Menu; - Navigate to the TLB, OCX, or DLL file that contains the missing COM and select it.
- You will then see the tool logging IDF generation in the
Session
Window
- Click [
- Click the
- After you do this for all "NOT FOUND" externals, the
References
Window will show that all externals are "FOUND" and some of the previously-reported translations errors may have gone away,
Once all, or almost all of the tasks, have DependencyStatus==”READY”, click [View\Interface Descriptions] on the main menu to access the idf\FromIDL folder in your gmStudio workspace. Zip all the XML and IDL files there and send that zip to me (or post for FTP download).
That is the gist of it.
I would be happy to do a GoToMeeting tomorrow to look over the project with you and assist with the above process. I am curious is you have any special conventions for your COM interop assemblies. Sometimes people play games with names using interop attributes in the C# If that is the case, it helps to be able to look at the C# behind the TLB files. I do not know if that will be necessary at this point.
I got your email with your wizard results.
It looks like you ran the tool in “wizard mode”. Wizard mode is alright to help you get things started and it beats reading the manual ;^) that’s why we created it… We have plans for improving Wizard mode; it’s still a pretty new feature. Also planning a command line wizard at some point.
Your email said this:
Build Type = [OleDll=41; Control=29; Exe=24; OleExe=2]
It says your project contains 96 tasks (VBPs) the codebase I got from the zip file has 104 VBPs. My project says this
Build Type = [OleDll=41; Control=29; Exe=32; OleExe=2] – so I have 8 extra EXE VBPs.
So that is the first question – what should I drop? The “Project1” VBPs?
I also see you have a number of VBPs with translation errors and that you have missing IDFs. The missing IDFs can cause translation errors:
Dependencies Status = [~IDF=25; READY=71]
Translation Status = [SUCCESS=82; ERROR=14]
As for creating the IDFs, I recommend you run through the preparation steps one more time in “workbench mode” (i.e., using controls on the gmStudio Main Form)
1) Open your upgrade project in gmStudio
2) Use the context menu on the upgrade tasks list (Listview at top of the form) to select all tasks (i.e. all VBPs)
3) With all tasks selected, click [Tools \Author Interface Descriptions] from the main menu
That will run for a while depending on your machine – 2-5 minutes I suspect. It will scan all VBPs, generate IDFs, and re-validate the VBPs
4) Next sort the tasks on “Dependency Status” and locate the ones with DependencyStatus == ”~IDF”
5) For each task with DependencyStatus == ”~IDF”
a. Click the References tab in the bottom of the Main Form
b. For each COM references that indicates NOT FOUND:
i. Click [Tools \Author Interface Descriptions…] from the main menu; navigate to the TLB, OCX, or DLL that contains the missing COM and select it.
You can will see the tool logging IDF generation in the session window if you click on it.
Once all, or almost all of the tasks, have DependencyStatus==”READY”, click [View\Interface Descriptions] on the main menu to access the idf\FromIDL folder in your gmStudio workspace.
Zip all the XML and IDL files there and send that zip to me (or post for FTP download).
That is the gist of it.
I would be happy to do a GoToMeeting tomorrow to look over the project with you and assist with the above process.
I am curious is you have any special conventions for your COM interop assemblies. Sometimes people play games with names using interop attributes in the C# If that is the case, it helps to be able to look at the C# behind the TLB files. I do not know if that will be necessary at this point.