У меня есть очень простой C++ библиотека классов, которая имеет два типа учетных записей в нем под названием Проверки и Savings. Я построил этот проект и скомпилировал его в .dll под названием Accounts. Я ссылаюсь на Accounts.dll в моем приложении C# Console. Для того, чтобы не дали никаких результатов, я пытаюсь использовать статические классы депозита и изъятию из Savings и Проверки классов соответственно. Я не вижу, чтобы функции отображались в обозревателе объектов или Intellisense, и я не могу его построить, когда пытаюсь получить доступ к этим функциям, иначе я смогу создавать и запускать, когда комментирую вызов mySavings.deposit (arg1, arg2) ...Reference C++/CLI библиотеки классов (составитель DLL) в # проекте C
Любая идея, что я делаю неправильно здесь? Я часто ссылаюсь на .dlls из других проектов и третьих сторон, но это первый раз, ссылаясь на C++ .dll в проекте C#.
Класс C++ библиотека
#pragma once
using namespace System;
namespace Accounts {
public ref class Savings
{
public:
unsigned accountNumber;
double balance;
static double deposit(Savings s, double amount)
{
s.balance += amount;
return s.balance;
}
};
public ref class Checking
{
public:
unsigned accountNumber;
double balance;
static double withdraw(Checking c, double amount)
{
c.balance -= amount;
return c.balance;
}
};
}
Применение
C# Console, который ссылается на ранее скомпилированный динамическую библиотеку
using Accounts;
class Program
{
static void Main(string[] args)
{
Savings mySavings = new Savings(); // works but object is empty
mySavings.deposit(mySavings, 100); // still breaks
}
}
я получаю следующее сообщение об ошибке: 'Accounts.Savings' не содержит определения для «депозит» и не может быть найден «депозит» метода расширения, принимающий первый аргумент типа «Accounts.Savings» (вам не хватает директивы использования или ссылки на сборку?)
Любая помощь будет принята с благодарностью.
Хорошо, Бен, это помогло. Теперь я могу видеть accountNumber и баланс, но я до сих пор не вижу свою функцию. Я должен был удалить & из класса, чтобы получить его для компиляции, но мне не хватает всего, что позволит просматривать функции ... Я обновил свой код выше. – user2146538
@ user2146538: Для использования аргумента функции и '->' вам нужна 'Savings ^' при ее использовании. Это потому, что переменные C#, как и в Java, на самом деле являются указателями. (Только для ссылочных типов, но типы значений не должны использоваться, когда есть инварианты, только для простых контейнеров данных) –
Спасибо за объяснение. Никогда не видел ничего подобного! :-) – user2146538