Quantcast
Channel: Visual Studio Integrate forum
Viewing all articles
Browse latest Browse all 4410

Trying to access DTE2 from unmanaged DLL

$
0
0

Hi --

Trying very hard to get my custom language code base callable and debuggable from my C#-generated vsx package.

Almost thought I had it.  I was progressing step by step, first creating a completely unmanaged C++ DLL.  This worked perfectly and I was able to step into it from my Package.Initialize function and set breakpoints and see values through the inspector, etc...   But as soon as I turned it into a mixed code DLL, I lost debugging ability.  This, even though I had Mixed Debugging set for all the projects.  I'm coming to the conclusion that it may just be impossible to integrate a mixed mode DLL into a vsx package and still be able to do mixed code debugging with it.

So I'm now attempting to ditch the managed portion of my DLL and do what I had been doing with .NET objects with unmanaged code instead.   This is basically attempting to get hold of a EnvDTE80.DTE2 object from the RunningObjectTable and manipulate the breakpoints in my host debugger.

Looks like I should be able to do this in completely unmanaged code, and I am tantalizingly close.  But this stuff is such a pain in the ass.   There's always one last stupid dilemma that isn't documented anywhere.

In this case it is the following:

Here's the code I'm using to try to get hold of the DTE2 object:

#include "stdafx.h"
#include "TestExport.h"
#include <string>
#include <vector>
#include <ObjIdl.h>

#pragma warning( disable : 4278 )
#pragma warning( disable : 4146 )
//The following #import imports EnvDTE based on its LIBID.
#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("8.0") lcid("0") raw_interfaces_only named_guids
//The following #import imports EnvDTE80 based on its LIBID.
#import "libid:1A31287A-4D7D-413e-8E32-3B374931BD89" version("8.0") lcid("0") raw_interfaces_only named_guids
//The following #import imports EnvDTE90 based on its LIBID.
#import "libid: 2ce2370e-d744-4936-a090-3fffe667b0e1" version("9.0") lcid("0") raw_interfaces_only named_guids
//The following #import imports EnvDTE100 based on its LIBID.
#import "libid: 26ad1324-4b7c-44bc-84f8-b86aed45729f" version("10.0") lcid("0") raw_interfaces_only named_guids
#pragma warning( default : 4146 )
#pragma warning( default : 4278 )

This is what is specified in a Microsoft web page.  But when I add this code, I get the following build error:

1>c:\executablemodelingdll\executablemodelingdll\executablemodelingengineimpl\debug\dte100.tlh(105): error C2504: 'Debugger4' : base class undefined

Has anyone seen this?  Or would you have any idea what this might be missing?

Thanks.

Mike



Viewing all articles
Browse latest Browse all 4410

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>