我在C#里面写了一段代码
然后利用CLR混编在C++里调用了C#的代码
然后在C++里声明了导出函数
然后再易语言里调用
在C++中调试的时候能够正确运行,
用C#重写一个winform程序调用生成的dll也可以
但是C#里面的代码无法运行
但是到了易语言这里就无法正确运行了,求解怎么办?
如果可以的话,我不想使用com,也不想用窗体做udp,也不想做wcf(也要注册)
因为本来就是由于com不得不注册所以才要尝试抛弃com才这么做的
这里是MoecraftFramework.dll部分的代码(C#),这是被C++调用的,调用过程见C++部分
- using System;
- using System.Runtime.InteropServices;
- namespace MoecraftFramework
- {
- [Guid("B8603727-08CE-49A0-AA6B-C48B79803E10")]
- public interface IMoePlugin { string test(); }//定义接口,不过这里没用
- [Guid("572FAFB6-6370-4737-AAB8-D1B5DEFB72BA")]
- [ClassInterface(ClassInterfaceType.None)]
- public class MoeDllImport : IMoePlugin //主要是要能调用这里的方法并获得值
- {
- public string test()
- {
- return "中间传值测试!";
- }
- }
- }
这部分是C++部分的代码
这里是Source.def文件里的代码,声明导出函数的名称
- LIBRARY MoeExport
- EXPORTS
- Test
- Test2
这里是MoeExport.h文件里的代码,定义导出函数
- extern "C" __declspec(dllexport) char* test();
- extern "C" __declspec(dllexport) char* test2();
这里是MoeExport.cpp文件里的代码,采用CLR混编#include "stdafx.h"
#include "MoeExport.h"
#include "Objbase.h"
#using "D:\\project\\cqCSharpSDK\\cqpDemo\\MoecraftFramework\\bin\\Debug\\MoecraftFramework.dll"
using namespace MoecraftFramework;
using namespace System;
char* __stdcall Test()
{
CoInitialize(0);
MoecraftFramework::MoeDllImport ^c = gcnew MoecraftFramework::MoeDllImport();
String^ i = c->test();
char* ch = (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(i);
CoUninitialize();
return ch;
}
char* __stdcall Test2()
{
MessageBox(NULL, TEXT("5"), TEXT("xiaoxi"), 0);
String^ x = { "我该拿什么表情面对这个?" };
char* ch = (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(x);
return ch;
}
这里是易语言部分的代码
变量名 | 类 型 | 静态 | 数组 | 备 注 | 新的对象 | 对象 | | | 文本 | 文本型 | | | 返回值 | 文本型 | | | CoInitialize (0 )返回值 = Test ()CoUninitialize ()输出调试文本 (到文本 (返回值 ))
|