|
after I changed the project setting as your instruction as follow: c/c++ -> use run-time library, substitute the "Debug Multithreaded Dll" with "Debug Single-Threaded", there is a error:
Compiling...
StdAfx.cpp
e:\program files\microsoft visual studio\vc98\mfc\include\afxver_.h(130) : fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
Error executing cl.exe.
so, I think the default option "Debug Multithreaded Dll" is a good one
Is there any other instruction? I really need help
|
|
|
|
|
wanthelp wrote:
so, I think the default option "Debug Multithreaded Dll" is a good one
Ok. That's for one of the projects. But you also mentioned you had a lib, which is used by the project that produces the exe, right? My point was that you made sure the option setting was the same in the lib project and in the exe project.
More details:
According to your post, the linker errors appear while linking GATest.exe, right?
Each of the errors is saying that some symbol (e.g.: _exit), which is defined in some object code file (e.g.: crt0dat.obj) in the library libcmtd.lib, was already defined in msvcrtd.lib, which is a stub for MSVCRTD.dll. The problem is that GATest.exe shouldn't be trying to link both libraries at the same time.
The first of those libraries, libcmtd, is used when you set the /MTd compiler option, which in the project settings dialog appear as "Multithreaded Debug" (or something similar, depending on the Visual Studio version you are using), and specifies you want to use the Runtime Library as a multithreaded static lib.
The second library, msvcrtd.lib, is used when you set the /MDd compiler option, which in the project settings dialog appear as "Multithreaded Debug DLL", and specifies you want to use the Runtime Library as a multithreaded dynamically linked library (DLL).
Now, my theory is that the project (or make file) you use to create the library is setting /MTd, and that conflicts with the setting in the GATest project, which is /MDd.
Thus, my suggestion is that you make sure both the lib and the exe use the same setting.
--
jlr
http://jlamas.blogspot.com/[^]
|
|
|
|
|
I'll quote here the e-mail you sent me:
wanthelp wrote:
I got the source code from Internet and used command nmake to build the library. The source code is programmed by c, so I think there is no project setting. Therefore, I can only change the setting of GATest project as you mentioned -- changing /MDd to /MTd, but it still does not work
I will appreciate you can give me more instruction about it.
Best regards
I will appreciate if you post this kind of messages to the forum, which is where they belong, instead of directly e-mailing me. I'll answer it if I can, or anybody else may offer help too. Unless there's something strictly personal in your message, or I ask for it, a direct e-mail is not appropriate.
Now, to your problem. If you are using nmake to build the library, the project is the makefile being passed to nmake, and the project settings are the contents of that makefile. Locate the makefile, and look for any /MTd or /MDd in it.
BTW, which library is that you are trying to use? Maybe there are some online instructions or user forum where you can get more help?
--
jlr
http://jlamas.blogspot.com/[^]
|
|
|
|
|
Check the include files may be coming in loop like :-
//file b.h
#include "a.h"
//file c.h
#include "a.h"
#include "d.h"
//file e.h
#include "b.h"
#include "b.h"
This may reason for this LNK2005.
Remove this.
Check for Include files order in Directory tab from options.
Anuj
|
|
|
|
|
Anuj Purwar wrote:
Check the include files may be coming in loop like :-
[...]
This may reason for this LNK2005
How come? Include directives are processed at compilation time. LNKnnnn is a linker error...
--
jlr
http://jlamas.blogspot.com/[^]
|
|
|
|
|
|
How do you check if a check box has been checked?
I created a check box named IDC_checkbox and assigned a member variable of type Value named m_checkBox.
|
|
|
|
|
There's a member method called GetCheck. It returns a BOOL, which is an int, 0 is not checked.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
If you used Class Wizard and added a variable of type Value, it must have defined it as BOOL.
When you want to check the state of the checkbox, you can call UpdateData(TRUE) and that will copy the state of the control in your variable
UpdateData(TRUE);
if (m_checkBox)
{
}
else
{
}
To change the state of the control, assign a new value to your variable and call UpdateData(FALSE)
Note UpdateData() processes all controls that have associated "Value" variables at once.
--
jlr
http://jlamas.blogspot.com/[^]
|
|
|
|
|
Jose Lamas Rios wrote:
If you used Class Wizard and added a variable of type Value, it must have defined it as BOOL
Damn, I missed that bit.
I hate that updatedata stuff, I never use it ( although I know all about it, I just missed it in his question ).
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Christian Graus wrote:
I hate that updatedata stuff, I never use it.
Yep, I don't like it much myself...
Christian Graus wrote:
( although I know all about it, I just missed it in his question ).
I'm sure you do
--
jlr
http://jlamas.blogspot.com/[^]
|
|
|
|
|
Thanks, this is what I needed!
|
|
|
|
|
Hello folks,
This one has been bugging me for quite a while, I sort of have a solution but it is quite time conuming.
I have a DLL written in VB.NET that I would like to use in console applciation C++.
Project properties in VB.NET are set for COM interop, and I can see in the registry after I run it.
The problem comes up when I try to use if in C++.
Here is import statement:
#import "\VOT\ADLL\ADLL\bin\Debug\AndrDLL.tlb" raw_interfaces_only raw_native_types no_namespace
but I cannot even expose methods correctly, C++ does not see the interface...
One way to fix is rewriting Vb project to C# project.
Can anyone suggest something better and faster?
Thanks in advance.
Sincerely,
Max Pastchenko
|
|
|
|
|
Has anyone, in fact, successfully used a VB.NET dll in C++. I wrote a small VB project that creates dll, which just adds two numbers. I get some exception. While the code converted to C# works fine.
this is my code:
ICalculatorPtr mycalculator("CompareDLL.Test");
long one = 10;
long two = 20;
long lBla;
mycalculator->Add(one,two,&lBla);
if I try to use ICalculator, i get error message cannot create abstract class...
Sincerely,
Max Pastchenko
|
|
|
|
|
writing an answer, to one part pf problem.
for previous post: initializing COM actually worked
// initialize COM
HRESULT hr = CoInitialize(NULL);
Sincerely,
Max Pastchenko
|
|
|
|
|
Is it possible that DLL project is implemented incorrectly?
I still dont see my interface in the dropdown.....
Sincerely,
Max Pastchenko
|
|
|
|
|
.hmmmmmmm
There is something I am confused about now, I hope someone can clarify this for me
SO i have added one method to an interface in VB.NET created DLL used it in C++ works fine. Now, I add another method to it, it does not display second method. When I delete original method from VB.NET code, in C++ it still sees it present in the dropdown but gives me compilation error.
Can someone please clarify this?
Sincerely,
Max Pastchenko
|
|
|
|
|
problem solved.
Every time VB builds a project, a .tlb is created (privided COM Interop option is chosen) This tlb is linked with a C++ project that uses .DLL. So when I already have a .tlb and decide to rebuild my VB DLL project a tlb is basically recreated. The solution i found for myself is to rebuild my DLL project after closing C++ project and then opening C++ project again. Of course initializing COM is another thing that needs to be done to properly use DLL
Sincerely,
Max Pastchenko
|
|
|
|
|
I have a small console program that I have written that seems to execute correctly, but I keep getting a Debug Assertion Failed! error when the program is exiting. And it points to this file dbgdel.cpp line 52 and Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse).
If I just comple a release version I do not get any error messages when the program exits.
I am stuck on how to fix this error. Is it important that I do fix it?
Any help will be great.
-----------------------
Ok now what?
-----------------------
|
|
|
|
|
It looks to me like perhaps you're calling delete twice ? When you delete a pointer, do you set it to NULL ?
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
I don't see any place that I am calling delete twice. I just got a different error. This one said "DAMAGE: after Normal block (#48) at 0x00F74F18" and when I click on the "Ignore" button then I get the first error message again.
The program does make calles to a third parties api that I am using is it possible that something in thier code is calling delete after my code has finished?
-----------------------
Ok now what?
-----------------------
|
|
|
|
|
It's entirely possible that a third party API is creating the ASSERT. Look at the call stack to see where the call comes from that ends up with that ASSERT.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Orville Warnick wrote:
And it points to this file dbgdel.cpp line 52
Can you set a breakpoint on this line? When the breakpoint is hit, check the call stack to see how your program got there.
Orville Warnick wrote:
If I just comple a release version I do not get any error messages when the program exits.
You may not get an error message, but the symptom that caused the error still exists.
Orville Warnick wrote:
Is it important that I do fix it?
That all depends on if you want a bug in your program.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
Anyone has a hint as to why a service might start successfully on WinXP and Win2003 machines, but not on Win2000 machines?
|
|
|
|
|
How do you define "successfully"? First thought is that you are using an API function that is only supported in XP or W2K3.
|
|
|
|