Типы ссылок по умолчанию равны null, чтобы указать, что они не ссылаются на какой-либо объект. Следовательно, если вы попытаетесь получить доступ к объекту, на который ссылаетесь, а его нет, вы получите исключение NullReferenceException.
Для Ex:
SqlConnection connection = null;
connection.Open();
Когда вы запускаете это кода, вы получите:
System.NullReferenceException: Object reference not set to an instance of an object.
Вы можете избежать этой ошибки, например, следующим образом:
if (connection != null){
connection.Open();
}
Примечание. Чтобы избежать этой ошибки, вы всегда должны инициализировать свои объекты прежде чем пытаться что-либо сделать с ними.
Сначала я использовал COM-взаимодействие, но теперь я переключился на IJW (он просто работает), поскольку он намного проще. У меня есть оболочка C ++ / CLR DLL (скомпилировать с /clr).
Простой пример (с использованием статики для облегчения вызовов):
namespace MyClasses
{
public class MyClass
{
public static void DoSomething()
{
MessageBox.Show("Hello World");
}
}
}
В DLL я могу ссылочные пространства имен следующим образом:
using namespace MyClasses;
И назовите его:
__declspec(dllexport) void CallManagedCode()
{
MyClass::DoSomething();
}
Теперь у вас есть неуправляемый DLL-экспорт «CallManagedCode», который вызывает управляемый код.
Конечно, вам также нужно преобразовать данные между управляемой / неуправляемой границей. Начиная с VS2008, Microsoft включает помощника маршала для преобразования между неуправляемыми и управляемыми типами. См. http://msdn.microsoft.com/en-us/library/bb384865.aspx
RE: Как вызвать управляемый код C # из неуправляемого приложения C ++?
Вызов управляемых .NET C # COM-объектов из неуправляемого кода на C ++ ...
http: // www .codeproject.com / KB / cs / ManagedCOM.aspx
Обтекание управляемой C # DLL в неуправляемом проекте C ++: dll.
http: // www.experts-exchange.com/Programming/Languages/.NET/Q_22006727.html
Или используйте проект моего , который позволяет C # создавать неуправляемый экспорт. Их можно использовать так, как если бы они были написаны на родном языке.
Я использовал классы оболочки C ++ / CLI , описанные здесь , и это было относительно легко реализовать.