C ++ std :: string Parameter <Bad Ptr>

I am using Visual Studio 2010.

I have a class with the following constructor:

CVideoAnnotation::CVideoAnnotation(std::string aPort, DWORD aBaudRate)

I create an instance of CVideoAnnotation as follows:

CVideoAnnotation cVideoAnnotation("COM3", CBR_9600);

'CBR_9600' is a macro that permits 9600.

At the bottom of the constructor, aBaudRate is 9600, as expected. However, aPort is not receiving properly. When I hover over it, IntelliSense gives the value <Bad Ptr>.

Does anyone have any thoughts on why the string is not going through properly?

Thanks Dave

As an update to my original question, I add assembly code to invoke the constructor and a set of locales once inside the constructor.

   CVideoAnnotation cVideoAnnotation("COM3", CBR_9600);
0041177D  push        2580h  
00411782  sub         esp,20h  
00411785  mov         ecx,esp  
00411787  mov         dword ptr [ebp-174h],esp  
0041178D  push        offset string "COM3" (4198C8h)  
00411792  call        std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (41131Bh)  
00411797  mov         dword ptr [ebp-17Ch],eax  
0041179D  lea         ecx,[ebp-11h]  
004117A0  call        dword ptr [__imp_CVideoAnnotation::CVideoAnnotation (41D4DCh)]  
004117A6  mov         dword ptr [ebp-180h],eax  
004117AC  mov         dword ptr [ebp-4],0  





CVideoAnnotation::CVideoAnnotation(std::string aPort, DWORD aBaudRate)
{
100137F0  push        ebp  
100137F1  mov         ebp,esp  
100137F3  push        0FFFFFFFFh  
100137F5  push        offset __ehhandler$??0CVideoAnnotation@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@K@Z (1001DC82h)  
100137FA  mov         eax,dword ptr fs:[00000000h]  
10013800  push        eax  
10013801  sub         esp,164h  
10013807  push        ebx  
10013808  push        esi  
10013809  push        edi  
1001380A  push        ecx  
1001380B  lea         edi,[ebp-170h]  
10013811  mov         ecx,59h  
10013816  mov         eax,0CCCCCCCCh  
1001381B  rep stos    dword ptr es:[edi]  
1001381D  pop         ecx  
1001381E  mov         eax,dword ptr [___security_cookie (10026090h)]  
10013823  xor         eax,ebp  
10013825  mov         dword ptr [ebp-10h],eax  
10013828  push        eax  
10013829  lea         eax,[ebp-0Ch]  
1001382C  mov         dword ptr fs:[00000000h],eax  
10013832  mov         dword ptr [ebp-18h],ecx  
10013835  mov         dword ptr [ebp-84h],0  
1001383F  mov         dword ptr [ebp-4],0  
+3
source share
4 answers

CVideoAnnotation DLL, DLL STL. , , , const char * std::string .

, std::string const std::string &

+4

string DLL . , STL , string .

- Intellisense, ? Release Intelliesnse . cout << aPort << endl; , .

, - ., string , , , , . - , , DLL, ++, , , .

+2

"COM3" std::string, const char *, std::string, .

0

I also fought with what looked like unsuccessful byte alignment. Based on the suggestions here that crossing library boundaries can be problematic, I suspected (although I use a static library instead of a DLL) that I could deal with the same problem. I created a class in one library whose code was in another. When I moved the instance to the library, where its code was the problem, it left. I don’t understand why this worked, but at least now I can move forward.

0
source

Source: https://habr.com/ru/post/1777814/


All Articles