C# 调用C++;来自C的DLL#
我正在制作一个控制激光的程序,但要做到这一点,我需要将一个dll导入c#并用它调用函数。原来的程序是用C++编写的,我就是不知道怎么做。 因此,我的问题是:C# 调用C++;来自C的DLL#,c#,c++,dll,C#,C++,Dll,我正在制作一个控制激光的程序,但要做到这一点,我需要将一个dll导入c#并用它调用函数。原来的程序是用C++编写的,我就是不知道怎么做。 因此,我的问题是: 如何在c中导入dll# 如何在C++语言中调用C++中的函数 P>为了让它更清楚,我已经从C++程序中添加了代码。 #include "MarkEzdDll.h" class CDemoEzdDlg : public CDialog { // Construction public: CDemoEzdDlg(CWnd* pPar
#include "MarkEzdDll.h"
class CDemoEzdDlg : public CDialog
{
// Construction
public:
CDemoEzdDlg(CWnd* pParent = NULL); // standard constructor
HINSTANCE m_hEzdDLL;//DLLµ÷Óþä±ú
LMC1_INITIAL lmc1_Initial;
LMC1_CLOSE lmc1_Close;
LMC1_LOADEZDFILE lmc1_LoadEzdFile;
LMC1_MARK lmc1_Mark;
LMC1_MARKENTITY lmc1_MarkEntity;
LMC1_GETPREVBITMAP lmc1_GetPrevBitmap;
LMC1_READPORT lmc1_ReadPort;
LMC1_WRITEPORT lmc1_WritePort;
LMC1_SETDEVCFG lmc1_SetDevCfg;
LMC1_SETHATCHPARAM lmc1_SetHatchParam;
LMC1_SETFONTPARAM lmc1_SetFontParam;
LMC1_GETPENPARAM lmc1_GetPenParam;
LMC1_SETPENPARAM lmc1_SetPenParam;
LMC1_CLEARENTLIB lmc1_ClearEntLib;
LMC1_ADDTEXTTOLIB lmc1_AddTextToLib;
LMC1_ADDFILETOLIB lmc1_AddFileToLib;
LMC1_ADDBARCODETOLIB lmc1_AddBarCodeToLib;
LMC1_CHANGETEXTBYNAME lmc1_ChangeTextByName;
LMC1_AXISMOVETO lmc1_AxisMoveTo;
LMC1_AXISCORRECTORIGIN lmc1_AxisCorrectOrigin;
LMC1_GETAXISCOOR lmc1_GetAxisCoor;
LMC1_SAVEENTLIBTOFILE lmc1_SaveEntLibToFile;
在该对话框中,有一个按钮,其上附加了以下代码:
void CDemoEzdDlg::OnButtonRun()
{
// TODO: Add your control notification handler code here
UpdateData();
if(lmc1_Mark==NULL)
{
return;
}
lmc1_Mark(FALSE);
UpdatePrevBmp();
AfxMessageBox(_T("Mark file finish!"));
}
此时激光器应启动
如何在c#?(从您的帖子中不太清楚,但我猜您想从c#
代码调用c++
函数。)
PInvoke
非常适合这一点。这里有一个很好的教程:
在项目设置中不导入DLL;而是从源代码中调用它。当然,您必须确保DLL与项目的输出(.exe
)文件位于同一文件夹中
简而言之,如果您在foo.dll
中定义这样的C方法:
extern "C" __declspec(dllexport) bool __stdcall GetTrue()
{
return true;
}
然后您的C#程序可以这样声明它:
[DllImport("foo.dll")]
static public extern bool GetTrue();
只需使用GetTrue()
调用它。(您还需要在同一文件中使用System.Runtime.InteropServices;添加)
当然,当使用C和C++之间的数据类型(如字符串、对象等)时,它会变得更复杂。但是,教程很好地说明了。只是澄清,你想从C++代码中调用C++函数,还是想用C++代码调用C++方法?“定义C++方法”实际上你定义了C方法;普赖特,谢谢你!我已经编辑过了。:)谢谢你这对我很有帮助:)