当 c# Outlook 插件使用 c++ 库中的函数时崩溃
Crash when c# Outlook Addin use funtion in c++ library
我写了一个加载c++库的outlook插件,插件可以看到库中的函数,但是在使用时,它崩溃了。
这是我的 C++ 库代码:
// TestDLL.h
#pragma once
using namespace System;
namespace TestDLL {
public ref class MyClass
{
public:
int Add(int a, int b);
};
}
// TestDLL.cpp
#include "stdafx.h"
#include "TestDLL.h"
namespace TestDLL {
int MyClass::Add(int a, int b)
{
return a + b;
}
}
这是我的插件代码:
using TestDLL;
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Thread t = new Thread(new ThreadStart(Test));
t.Start();
}
private void Test()
{
MyClass myClass = new MyClass();
int res = myClass.Add(12, 25);
MessageBox.Show("res:" + res);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
}
如果我尝试使用 c# 窗体应用程序,它会起作用。那么这里发生了什么?
Outlook 的位数应与非托管 DLL 的位数相对应。您不能将 x86 dll 加载到 x64 进程中。
我写了一个加载c++库的outlook插件,插件可以看到库中的函数,但是在使用时,它崩溃了。
这是我的 C++ 库代码:
// TestDLL.h
#pragma once
using namespace System;
namespace TestDLL {
public ref class MyClass
{
public:
int Add(int a, int b);
};
}
// TestDLL.cpp
#include "stdafx.h"
#include "TestDLL.h"
namespace TestDLL {
int MyClass::Add(int a, int b)
{
return a + b;
}
}
这是我的插件代码:
using TestDLL;
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Thread t = new Thread(new ThreadStart(Test));
t.Start();
}
private void Test()
{
MyClass myClass = new MyClass();
int res = myClass.Add(12, 25);
MessageBox.Show("res:" + res);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
}
如果我尝试使用 c# 窗体应用程序,它会起作用。那么这里发生了什么?
Outlook 的位数应与非托管 DLL 的位数相对应。您不能将 x86 dll 加载到 x64 进程中。