I will have to ask you some questions so that I can better understand the execution nature of your application.
For example, how long does the application run? Of that time, how much of it is actually code in dll A? If dll A is simply loading dll B and calling into it, you may never see any samples in dll A. Sampling gives you a statistical representation of where theprocessor is spending its time.
Are you configuring the VTune analyzer to "launch" your application? I assume you are collecting Clockticks and Instructions Retired?
If you want to get an accurate picture of the calling relationships, you can use call graph (available in the Wizards list).
Sorry for maybe appearing dense, but if dll A is only calling into dll B, then you may still not see any samples in dll A. I mean, dll A must be doing something CPU-intensive to show up in the results.
The other thought is, are you starting from the Process view? Press the Process button at the top of the Sampling view and then select your process from the list of processes running on the system. Next, press the Modules button (or Threads if you want to limit which threads you look at) and see if dll A shows up.
Finally, (sorry if you already said this) are you building dll A with full debug information? It should still be the "Release" build, but you should include debug info.
Try opening the DLL in the Static Module Viewer:
1. Select the Open Static Module Viewer from the File menu.
2. Review the module and function list to ensure that the expected routines are present with the Functions with source information check box checked. If modules or functions are missing, ensure you have created a binary with debug information.