CLR을 사용하여 C++/C#을 결합하여 공학용 계산기를 만드는 것은 흥미로운 프로젝트입니다. 아래는 예시 코드입니다.
C++ 코드:
```cpp
#include 'stdafx.h'
#include <cmath>
using namespace System;
namespace CalculatorLibrary
{
public ref class Calculator
{
public:
static double Add(double a, double b)
{
return a + b;
}
static double Subtract(double a, double b)
{
return a - b;
}
static double Multiply(double a, double b)
{
return a * b;
}
static double Divide(double a, double b)
{
if (b == 0)
{
throw gcnew DivideByZeroException();
}
return a / b;
}
static double Sin(double a)
{
return sin(a);
}
static double Cos(double a)
{
return cos(a);
}
static double Tan(double a)
{
return tan(a);
}
static double Log(double a)
{
if (a <= 0)
{
throw gcnew ArgumentException('The argument must be greater than 0.');
}
return log(a);
}
};
}
```
C# 코드:
```csharp
using System;
using CalculatorLibrary;
namespace CalculatorApp
{
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine('Enter the first number:');
double a = double.Parse(Console.ReadLine());
Console.WriteLine('Enter the second number:');
double b = double.Parse(Console.ReadLine());
Console.WriteLine('Enter the operation (+, -, *, /, sin, cos, tan, log):');
string operation = Console.ReadLine();
double result = 0;
switch (operation)
{
case '+':
result = Calculator.Add(a, b);
break;
case '-':
result = Calculator.Subtract(a, b);
break;
case '*':
result = Calculator.Multiply(a, b);
break;
case '/':
result = Calculator.Divide(a, b);
break;
case 'sin':
result = Calculator.Sin(a);
break;
case 'cos':
result = Calculator.Cos(a);
break;
case 'tan':
result = Calculator.Tan(a);
break;
case 'log':
result = Calculator.Log(a);
break;
default:
Console.WriteLine('Invalid operation.');
break;
}
Console.WriteLine('Result: ' + result);
}
catch (Exception ex)
{
Console.WriteLine('Error: ' + ex.Message);
}
Console.ReadLine();
}
}
}
```
위 코드에서는 `Calculator` 클래스를 정의하여 기본적인 수학 함수와 예외 처리를 구현합니다. C# 코드에서는 `Calculator` 클래스를 사용하여 사용자 입력을 받고 결과를 출력합니다.
이 코드를 Visual Studio에서 빌드하고 DLL 파일을 생성한 후, C# 프로젝트에서 참조로 추가하여 사용할 수 있습니다.