GUI harness for MFC DLL? - c++

I have a CWinApp-based application that is built as a DLL that is loaded by another 3rd party application as a plugin. My app exposes an exported StartPlugin() method that creates a CDialog derived dialog. This exported function is somehow called by the 3rd party application. I'd like to be able to run my DLL outside of the 3rd party application so I can test and play around with UI stuff (not for unit testing).
How can I create a test harness that will allow me to run my dll code? I'm not sure how the main application launches my dll plugin, but I'm speculating that it's creating a User-Interface thread? So would I just need to create a simple exe that can somehow load my dll and create a new thread or something. Any links to tutorials or articles that explain something like this.

Use the Visual Studio wizard to create a MFC application, probably Dialog based. Have a button on the dialog to run your plugin. In the button code do a LoadLibrary with the name of your DLL, then call GetProcAddress to get a pointer to the StartPlugin function. Then you can call StartPlugin.

Related

How to disable default loading of Satellite DLLs (Language resource files) in a MFC project?

MFC projects provide enhanced support for satellite dlls which generally helps in creating localized application with multiple resources. Those dlls are called as Saltellite dlls. When program is executed, MFC automatically loads the localized resource based on environment.
If MFC does not find any satellite DLLs, it uses whatever resources are contained in the application itself. I want to know if there is any configuration setting or any other way which can help stopping MFC to load any resource specific dll.
I know that MFC tries to load resource dlls and some other initialization stuff at entry point by calling method InitInstance(). If I do not call InitInstance method, I am observing MFC does not try to load any resource specific dll. Not sure if this is right way or is there Microsoft suggested way?

Cefsharp CLR initialization crash in MFC project

I created a CLR class as DLL and loaded cefsharp,cefsharp winforms,cef core through Nuget package in vs 2015.When I run it in a sample MDI CFormView application it works.But when I try to run it in my main MDI application which loads COM DLL it crashes without any errors.The code never executes and crashes even before initialisation.I am using it like below
using namespace cefsharp;
using namespace cefsharp::winforms:
Cef:: Initialize (gcnew CefSettings());
The debugger never comes to this place and application crashes.I am really unable to debug since it doesn't even hit initinstance if I write that line but if I don't write that line the app runs.
The problem somehow resolved when I created a CLR inside my project and added the needed dependencies for it.Now I am able to load my MDI applications with different views and also Initialize the COM dll without encountering any crash.

COMMAND AND UPDATE_COMMAND_UI handlers not called in MFC dll

I have ON_COMMAND and ON_UPDATE_COMMAND_UI handlers for menu items in an MFC dll. But they are not invoked. The same code compiled as .exe has the handlers being invoked. What could be the reason for this?
ON_UPDATE_COMMAND_UI and ON_COMMAND handler are only called when the object that contains the handler is within the command routing.
So the DLL itself isn't the problem but also this depends on how you created your DLL. For a standard DLL and without sharing the MFC as a DLL this will not work at all. AFAIK to get it run the DLL should be an extension DLL loaded into the application. The reason is that the main application wil not recognize your objects in a standard DLL when the MFC is statically linked.
Read more about command routing in the MSDN and in the technical notes

MFC DLL calls AfxWinInit and crashes application

I have an MFC .exe application, and I created another project for a DLL with MFC dynamically linked to it.
Now, when I import that DLL through LoadLibrary, it crashes my application, because when the importing is done, the DLL calls AfxWinInit().
Should the DLL call AfxWinInit()? How do I avoid it? Or is something else wrong?
In your MFC application WinMain() calls AfxWinMain(). The AfxWinInit() is called at the beginning of AfxWinMain(). So the initialization is done by framework for you. There is no need to initialize it again.
MFC DLLs provide their own entry point, so you're not supposed to write one yourself. If you plan to write a DLL with MFC support, I'd suggest you start with a fresh MFC DLL created by the app wizard and then move your code there.
For MFC applications that load extension DLLs, use AfxLoadLibrary instead of LoadLibrary.

C++ how to dynamically load a 3rd party DLL file

I need to integrate a 3rd party DLL file with my application, I have only the .DLL and the .pdf documentation of the DLL.
This is the pdf of the dll: http://www.whiteboxrobotics.com/Support/pdf/PC-BOT_dotNet_v1.0_documentation.pdf
I can load the DLL in Visual Studio just by dragging it into the toolbox, BUT, I would like to know how that is done in coding.
Since I only have the DLL, I guess the only option is dynamic loading, using the LoadLibrary() and GetProcAddress().
But it seems to be such a hassle, and I can't figure out how I would load any of the functions which receive some custom (enum) parameters, e.g. in the .pdf the function SendMessage(...) which takes PCBOTEventArgs.messageType as one of the parameters.
Yet loading the DLL through the design view is so simple and extracts the whole DLL.
Why is that?
Is there something else besides using function pointers and GetProcAddress()?
A dotNET = (Mircosoft) .NET Framework is not the same as a "normal" dll, you can't use GetProcAddress and LoadLibrary with .NET dlls
.Net Dlls are normally packed classes, by dragging the dll into your workspace you just import the dlls scope, see for your self in the object browser
to load a .net dll (Assembly) during runtime, for example for a plugin, look here http://support.microsoft.com/kb/837908
3rd Party integration is done using connectivity of what you want to connect for ex you want to add a service to your website, For installing that particular DLL to your website ,first of all read the documentation and connectivity required and than copy paste the DLL files to your projects.
You can make more clear when you can specify the services which want to opt as 3rd party integration