Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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
从DLL返回值的错误处理 使用C++,我在DLL中研究一种方法,它从设备返回一个温度值。_C++_Dll_Error Handling_Return Value - Fatal编程技术网

从DLL返回值的错误处理 使用C++,我在DLL中研究一种方法,它从设备返回一个温度值。

从DLL返回值的错误处理 使用C++,我在DLL中研究一种方法,它从设备返回一个温度值。,c++,dll,error-handling,return-value,C++,Dll,Error Handling,Return Value,如果无法读取温度,我想返回设备的错误状态。这样,我想添加一种错误处理,以避免调用额外的方法来获取设备状态 因此,如果不能正确读取,我不能返回错误的温度值,例如,如果设备未初始化,我可以返回-1.0或-2.0,但可以将其解释为温度 我还希望调用此方法和使用此DLL将与其他编程语言(如Pascal/Delphi、Python等)兼容 在Java中,我将使用以下方法制作一个jar: public float getTemperature() throws Exception{ float temp

如果无法读取温度,我想返回设备的错误状态。这样,我想添加一种错误处理,以避免调用额外的方法来获取设备状态

因此,如果不能正确读取,我不能返回错误的温度值,例如,如果设备未初始化,我可以返回-1.0或-2.0,但可以将其解释为温度

我还希望调用此方法和使用此DLL将与其他编程语言(如Pascal/Delphi、Python等)兼容

在Java中,我将使用以下方法制作一个jar:

public float getTemperature() throws Exception{

 float temperature;

 try{
   
   temperature = ...;

   return temperature;

 }catch(Exception E){

    throw new Exception("Device not initialized...")

 }      

}
在C++中用以下方法实现这一点是正确的:温度将被参数返回,方法的负返回值包含错误代码:

声明:

extern "C" MYDLL int getTemperature(float*);
实施:

int getTemperature(float* temp)
{

  if (device_not_ready)
  {
    *temp = 0;
    return -1;
  }

  if (device_has_error) 
  {
    *temp = 0;
    return -2;

  }

  float temperature = device_temperature;
    
  *temp = temperature;

  return 1;

} 

nullptr
不是有效输入时,应使用引用而不是指针作为参数。否则,代码看起来还可以,您是否看到任何问题?能否详细说明您所显示的代码存在的问题?你只是在问这种方式是否可以(答案是“没问题”)吗?谢谢你的注释,我已经修改了文本以突出问题。你有很多很多方法可以用来表示错误。可以引发异常,可以返回带有温度和错误代码的
struct
,也可以返回一个
std::optional
,它可以保持温度,也可以不保持温度,不保持一个表示错误。如果某个变量出现故障,则可以传入对该变量的引用,并向该变量写入错误代码。还有更多。你只需要决定如何做/什么最适合项目中现有的代码。我不能使用struct或抛出异常,因为DLL可以在Delphi、Python、JNI等中使用。。。