Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c+中访问fscanf()+;动态链接库_C#_C++_Dll - Fatal编程技术网

C# 在c+中访问fscanf()+;动态链接库

C# 在c+中访问fscanf()+;动态链接库,c#,c++,dll,C#,C++,Dll,我在C#应用程序中使用C++(MFC)dll。当我尝试使用不同的说明符访问fstream()函数(从DLL)时,我的应用程序正在关闭。示例代码如下所示: fscanf(fp,"%1c",&colon); // this works fine fscanf(fp,"%2x",&byte_count); // My application got closed. 但如果我单独执行C++应用程序,如果在C语言应用程序中使用了贯穿DLL,则不能调用它。它不会抛出任何错误或

我在C#应用程序中使用C++(MFC)dll。当我尝试使用不同的说明符访问
fstream()
函数(从DLL)时,我的应用程序正在关闭。示例代码如下所示:

fscanf(fp,"%1c",&colon);       // this works fine
fscanf(fp,"%2x",&byte_count);  // My application got closed.
<>但如果我单独执行C++应用程序,如果在C语言应用程序中使用了贯穿DLL,则不能调用它。它不会抛出任何错误或异常(因为该方法位于DLL中)。但这仅仅是关门而已。谁能给出解决方案??或者有没有办法找出生成的日志文件来找出错误

谢谢


Vinod查看以下代码:

int c=-1;
cout<<"enter 1:";   
scanf("%c",&c);
cout<<hex<<c<<endl;
c=-1; 
cout<<"enter 1:";
scanf("%2x",&c);
cout<<hex<<c<<endl;
intc=-1;

coutboth冒号和byte_count是一种无符号字符。如果我直接调用C++应用程序,它们就可以工作了。如果通过c#应用程序执行,则会给出一个错误。但通过C#应用程序,如果注释第二行“fscanf(fp),%2x,&byte#u count);”未定义的行为很有趣,它似乎只在一个实例中工作,而在另一个实例中不工作。将
byte\u count
更改为
int
或创建一个临时
int
进行读取,然后将其分配给
byte\u count
。接受它,继续前进,你无法战胜UB并赢得比赛。如果你只写了1个字节,你如何解释4个字节被改变了?它有时能工作的原因是因为对齐。而且c#变量被封送,这意味着任何溢出都会立即被检测到。这就是c#立即崩溃的原因,谢谢大家的支持。我找到了解决办法。数据类型不匹配。对于角色,我尝试将其作为%2X。这是错误的。我改成了未签名的long。现在它开始工作了
enter 1:1
ffffff31 <-- you wrote only 1 byte which is good
enter 1:1
1 <--- means you wrote 4 bytes.