//MfcDll:
BSTR CMyMFCdllApp::MyDllTest(TCHAR* x)
{
CString str(x);
str+="_经过MFC处理的数据";
return str.AllocSysString() ;
}
int CMyMFCdllApp::MyDllNumTest(int x)
{
int y=20;
return y*x;
}
byte* CMyMFCdllApp::MyDllByteTest(int ByteLenght)
{
byte *bx=new byte[ByteLenght];
for(int i=0;i<ByteLenght;i++)
{
bx[i]=212;
}
return bx;
}
//MyMFCdll.def
; MyMFCdll.def : 声明 DLL 的模块参数。
LIBRARY "MyMFCdll"
EXPORTS
MyDllStringTest
MyDllNumTest
MyDllByteTest
; 此处可以是显式导出
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
C#:
using System.Runtime.InteropServices ;
[DllImport("MyMFCdll.dll", EntryPoint = "MyDllStringTest", CharSet = CharSet.Unicode)]
private static extern IntPtr MyDllStringTest(string x);
[DllImport("MyMFCdll.dll", CharSet = CharSet.Unicode)]
private static extern int MyDllNumTest(int x);
[DllImport("MFCdll.dll", EntryPoint = "MyDllByteTest", CharSet = CharSet.Unicode)]
private static extern IntPtr MyDllByteTest(int ByteLenght);
private void button4_Click(object sender, EventArgs e)
{
//string:
MessageBox.Show(Marshal.PtrToStringBSTR(MyDllStringTest("中文123abc")));
//Num:
MessageBox.Show(MyDllNumTest(100).ToString());
//Byte:
int ByteLenght = 1000;
byte[] bx = new byte[ByteLenght];
IntPtr p= MyDllByteTest(ByteLenght);
for (int i = 0; i < ByteLenght; i++)
{
bx[i] = Marshal.ReadByte(p, i);
}
}
C++ :
typedef BSTR (WINAPI *MyFunC)(TCHAR*);
HINSTANCE hDllInst = ::LoadLibrary(_T("MyMFCdll.DLL"));
MyFunC DllFun = (MyFunC)::GetProcAddress(hDllInst,"MyDllTest");
::AfxMessageBox(DllFun(_T("MFCDLL动态调用")));
::FreeLibrary(hDllInst);
//c# Load MSDOS RegDll
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(@"MD C:/123");
p.StandardInput.WriteLine(@"subst U: C:/123");
p.Close();
//c# Auto RegDll
using System.Runtime.InteropServices ;
[DllImport("MyMFCdll2.dll", EntryPoint = "DllUnregisterServer")]
static extern int DllUnregisterServer();
[DllImport("MyMFCdll2.dll", EntryPoint = "DllRegisterServer")]
static extern int DllRegisterServer();