Debugging both, native (ANSI C DLL) and managed (C# Assembly) code - debugging

I'm having some troubles debugging a solution which contains both a native ANSI C DLL project and a managed C#/WPF application project.
I call the functions exported by the DLL using the LoadLibrary/GetProcAddress Win32 API functions (DllImport attribute is not applicable for my program as the DLL is selected by the user). Both projects are built using the Debug configuration. The native DLL is copied to the bin/Debug directory of the C# program. When I debug the C# project, I can't step into the native code.
Is there a way to step into the native code?
It works when I debug the DLL project using the C# program, but then I can't step into the managed code...
I'm using Visual Studio 2010 Professional and Visual Studio 2010 Ultimate.
lg,
Dominik

In your C# Project: Project + Properties, Debug tab, tick "Enabled unmanaged code debugging". Single stepping from managed code into unmanaged code isn't going to work. You need to set a breakpoint on the DLL function you want to debug.

Related

Stepping into the break point when using Win32 thru a CLI Wrapper in a C# .NET Application

I have the following solution structure:
Project Files
1. Win32 C++ DLL
2. CLI/C++ Wrapper DLL
3. WinForm C# Exe
4. MFC Tester Exe
When I access the Win32 using the following stucture:
WinForm => CLI Wrapper => Win32 DLL
I can debug the WinForm and the CLI Wrapper but not the Win32 DLL.
I can only unit test the Win32 DLL thru an MFC Tester.
Is there a way to seamlessly debug until the Win32 DLL if it is run from the WinForm GUI not the MFC GUI?
I tried the following:
1. Attach WinForm Running and break thru the Win32 DLL
2. Checked the setup of the visual studio project
Using the following answer on the following previous stackoverflow question's accepted answer. (e.g. setting to Mixed debug, setting /Ci option, etc)
No Symbols loaded in mixed C# C(win32) project using VS2010
Do you have other ideas? Is it even possible?
You need to make sure you select 'Native debugging' in the debug options of the project. It will work then if you native code has symbols/PDB's.

Create DLL in Visual Studio c++ that will be loading in VB

Description
I am trying to create a project that will create a DLL file (.COM managed DLL) using VS2010. This DLL will be loaded in VB. Also, I will be using STL in my dll.
Already Tried
1 - Created Visual C++ -> win32 -> Win32 project -> Next -> selected DLL -> ticked export Symbols -> Finish. Will this be a managed .COM DLL? How do I check? Will this DLL be working on 64-bit operating system as 64 bit dll or as x86 dll?
2 - Created Visual C++ -> MFC-> MFC DLL -> Regular DLL using shared MFC DLL
Will this be a managed .COM DLL? How do I check? Will this DLL be working on 64-bit operating system as 64 bit dll or as x86 dll?
Also, There are other two options Regular DLL With MFC statically linked and MFC extension DLL. I don't prefer the first one because it makes it harder to upgrade my dll in the future, And I don't know what the second one does?
Are there any other options I can use to create DLL?
If possible, you should eliminate the requirement to use STL and COM and just create a managed assembly. A managed assembly can be consumed by managed code and can publish events for use by managed code. In Visual Studio, this would be a CLR -> Class Library project.
If you must use STL and COM alongside managed code, then you'll need to create a mixed mode DLL. That's not simple to do, and I don't recommend that route if you have limited experience.
Alternatively, if you can eliminate the requirement for managed code, then you can create a native-only DLL that implements COM interfaces. COM interfaces can be consumed by native or managed code, but they require registration before use and a managed wrapper for use from managed code.

I can't Add dll to References in Visual Studio 2010

I work on WinApp in Visual Studio 2010 (With C# Language)
I want to add one dll (not system dll) to Reference.
but when I open Add Reference Window And Browse dll see under error message:
Could not load file or assembly 'W2D_D2.dll' or one of its
dependencies. The module was expected to contain an assembly manifest.
this file may not be a managed assembly.
I even change the Target Platform from ".net framework 4 client profile" to ".net framework 4" but not difference.
How Can Add This dll To My Project?
Looks like this DLL is not a managed assembly. You can check this very quickly by trying to open it with ILSpy or Reflector.
If this is the case, you'll have to pinvoke or use com to use this dll.

load c++ dll in ironpython

I have an ironpython app that uses dlls.
Some of the dlls written in c#, and one is in managed c++.
The app works fine on my host, and on any host that includes visual studio (2010) installation.
When I tried to run this app on hosts without vs, It failed. After some checking I discovered that ironpython cannot load the c++ dll.
After installing vs - the app runs fine.
I narrowed it down: the dll can be uploaded after the installation of:
-Microsoft application error reporting
-VC 9.0 Runtime(x86)
-VC 10.0 Runtime(x86)
-Microsoft visual studio macro tools
I tried to install Microsoft Visual C++ 2010 Redistributable Package http://www.microsoft.com/download/en/details.aspx?id=5555 and it didn't do the trick.
Why? what exactly happens in installation of vs, that doesn't occur when I install Microsoft Visual C++ 2010 Redistributable Package component?
How can I monitor errors that arise when loading dlls with ipy?
Thank you!
The DLL that is written in managed C++ uses a DLL for its standard libraries. You can change it to static libraries. Follow these steps
Open your project properties in Visual Studio (right click on the project)
Click you way to Configuration Properties > C++ > Code Generation
On the right, find Runtime Library and select Multi-Threaded Debug (/MTd)
Do the same for the Release build, but this time select Multi-Threaded (/MT)
Rebuild all
As for your specific questions :
1. The redistribuable installer will copy the DLL in the system path. Visual Studio will do the same thing. So if it doesn't work, make shure that you have the 32 or 64 bit binaries (same as your code, not the platform you are running). +If you are running from a console, close it and start a new one to get the updated path.
2. Use Dependency Walker. Loading your DLL will show you what it is looking for, it should be enough. To monitor its runtime execution, load IronPython. In the "Profile" menu, select "Start Profiling" and provide a command line that will reproduce your problem.

GoogleMock issue with Visual Studio 2010 and MSTest (C++/CLI)

Our product previously built in Visual Studio 2008 and used GoogleMock 1.5.0.
Now, after porting our product to Visual Studio 2010, any unit test DLL that uses GoogleMock will not load in visual Studio's Test View and consequently can't be executed.
Our production code is written in native C++ classes exported from C++ DLLs.
Our unit tests are written in C++/CLI so they can be hosted directly within Visual Studio. The C++/CLI unit tests exercise our native C++ classes, and GoogleMocks previously played quite happily in this scenario.
We build GoogleMock into static libs that use Multithreaded DLL at run time. All our production code also uses Multithreaded DLL.
We have tried GoogleMock 1.5 and 1.6 RC, both rebuilt within VS2010. But the problem arises with both versions of GoogleMock.
To reproduce, simply:
Create a new C++ Unit Test project
Add gmock.lib and gmock_main.lib as linker inputs
#include <gmock/gmock.h> at the top of the C++/CLI unit test header file.
The project will build fine, but the VS Test View cannot load the new unit test DLL. If you comment out the gmock.h inclusion, the DLL will load in Test View and its test fixtures will execute.
I am hoping that another VS2010 developer has encountered this problem and can suggest a fix.
My set-up:
Windows 7 x64
Visual Studio 2010, Service Pack 1
GoogleMock 1.5, or 1.6 RC
Our app is built as 32-bit (Win32 and x86).
All our C++ code, including GoogleMock, is compiled using VS2010's vc100 compiler. Our C++/CLI code is also built for .NET 4.0.
Thanks.
Having the same code setup as dripfeed (using Google Mock to test c++ native classes with MSTest), we got Google Mock 1.6 to work by building Google Mock with the /CLR compilation setting.
We now have successfully implemented some tests with Google Mock!
Note: Putting the /CLR setting may require to adjust other compilation settings.
I think I read somewhere on the documentation that it is a Microsoft's bug...

Resources