Hi Mark,
What I have heard: linking with 2 different C runtime libraries is
usually not recommended, although it may sometimes work OK (your
mileage may vary).
(I wonder if 2 different C runtimes gives you two different new/delete
operators to link with for instance....?)

The linking error comes from the C runtimes:
It's not Crypto++ which is referencing int main(...), rather it is the
C runtime libraries that you link with (they normally initialize
internal data structures, convert parameters etc, then call main, and
your program begins). It sounds like you are explicitly linking with
one ascii, and one unicode C runtime. The ascii one will probably
expect an int main(int, char....) to link with, and the unicode one
will probably expect an int main(int, wchar...) to link with. I am
guessing your managed code provides the second version, but not the
first. You may be able to make your project compile by defining a
dummy int main(int, char...) for the linker to find - or forcing the
linker to generate the code anyway with unresolved references - but I
don't know how to guarantee which main function will actually be
called when your program starts up.

I think the proper way to fix your problem is to build a version of
Crypto++ which uses the same C runtime as your managed DLL, by
changing the Crypto++ settings for code generation (maybe to debug
multithreaded dll? not sure) and character set (to UNICODE?), and then
any Unicode specific stuff for Crypto++.

Hope this is helps one way or the other,
Parch

On Jul 30, 8:10 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
wrote:
> Hi everyone
>
> I am trying to link the static lib build of Crypto++ 5.51 built with
> Visual Studio 2005 to a Managed Class Library (DLL). Has anyone else
> tried to link a static version of Crypto++ to a VS2005 managed C++
> class? If so, I was hoping someone could help me resolve the linking
> issues I am having.
>
> I am including Crypto++ as follows into a simple DLL created from the
> project wizard:
>
> // test.h
>
> #pragma once
>
> // Crypto++
> #define CRYPTOPP_DEFAULT_NO_DLL
> #include "default.h"
> #include "base64.h"
> #include "osrng.h"
> #include "rsa.h"
>
> using namespace CryptoPP;
>
> // Managed C++
> using namespace System;
>
> namespace test {
>
>         public ref class Class1
>         {
>                 // TODO: Add your methods for this class here.
>         };
>
> }
>
> The linker reports lots of conflicts with libcmt and mscvrt however I
> can resolve these by adding /FORCE:MULTIPLE to the linker command line
> properties. The only linking issue I cannot solve is this:
>
> LIBCMTD.lib(crt0.obj) : error LNK2019: unresolved external symbol
> _main referenced in function ___tmainCRTStartup
>
> What in Crypto++ is running int main(...)? I realise as well that
> Crypto++ is built is a non-Unicode project and the Managed DLL is
> built with Unicode libraries, so the true entry point is the Unicode
> main function. If I define a main function I get some interesting
> errors when loading the DLL from tester applications.
>
> Another option I have tried is to use the DLL build of Crypto++. I
> have had more luck with this, although there are some odd problems I
> have had with the Base64 encoder when it is destroyed which I think
> had to do with using the wrong delete operator pointer. But that is
> probably something for a seperate post!
>
> Any help would be appreciated!
>
> Many thanks
> Mark


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [EMAIL PROTECTED]
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---

Reply via email to