c 调用易语言指针,让易语言也伪造实现指针型(转)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

指针型数据类型是一样十分强大的数据类型。在很多应用时用指针型可以便捷的进行一些操作。

易没有指针型是一大憾事。

但突然灵机一闪,其实可以给易伪造一份指针型变量。

易的局部变量中的自定义数据类型变量实际是一个指针。平时操作的也是一个指针,只是开发人员接触不到。

而易的参考属性是很有价值的东西,为什么这么说,因为我所想到的就是强制修改掉指针啊。

子程序1(某指针变量)

{

局部变量 变量1,数据类型1

局部变量 备份指针

备份指针=修改指针_数据类型1(变量1,某指针变量)

变量1.成员2=1 ' // 相当于C中的 某指针变量->成员2=1;

变量1.成员4=xxxx

修改指针_数据类型1(变量1,备份指针) ' // 恢复指针,必须恢复,否则内存管理错误

}

看起来我上次发的解析易的类里面的一个代码的有点像

其实可以考虑做一个支持库,弄成通用类型,这样就可以省去大量[修改指针_xxx]了。

省去俺用copy的超麻烦低效率的方式来实现

至于修改指针_xxx的代码很简单因为在调用修改指针_xxx的时候实际易传的是二级指针

唯一的缺点就是数据类型必须符合易的内部数据类型规则,int对齐,只能是基本类型,不得嵌套其他类型,不能有数组。当然,如果仅是易代码里自己用的那就没这要求了,至于其他语言的看运气如何了。

========

下面代码听懂原理的高手免看,废话而已

===

void* 修改指针_xxx(void** p, void* pNew)

{

void* old = *p;

*p=pNew;

return old;

}

修改指针_xxx 整数形(参数1,参数2)

asm

{

// push ebp; mov ebp,esp;

mov edx,[ebp+8];

mov eax,[edx];

mov ecx,[ebp+c];

mov [edx],ecx;

leave;

retn 8;

}

返回(0)

========

貌似所有的编程工具都支持16进制,就易的产品没支持,汗一个。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中调用易语言编写的DLL文件,需要注意以下几点: 1. 确认DLL文件中导出函数的名称和参数类,这是调用DLL文件的基本前提。 2. 使用LoadLibrary函数加载DLL文件,并且使用GetProcAddress函数获取DLL中导出函数的指针。 3. 调用DLL中导出的函数,传递正确的参数类和参数值。 下面是一个简单的例子,假设我们有一个易语言编写的DLL文件,其中导出了一个函数,可以将两个整数相加并返回结果。 首先,我们需要在C语言中定义这个函数的原: ```c typedef int (*AddFunc)(int, int); ``` 然后,我们可以使用LoadLibrary函数加载DLL文件,并使用GetProcAddress函数获取导出函数的指针: ```c HINSTANCE hDll = LoadLibrary(TEXT("mydll.dll")); AddFunc add = (AddFunc)GetProcAddress(hDll, "Add"); ``` 最后,我们可以调用这个函数,并传入正确的参数: ```c int result = add(1, 2); ``` 注意,这里的参数类和参数值必须与DLL文件中导出函数的定义相匹配。 完整的代码如下: ```c #include <windows.h> #include <stdio.h> typedef int (*AddFunc)(int, int); int main() { HINSTANCE hDll = LoadLibrary(TEXT("mydll.dll")); if (hDll == NULL) { printf("Failed to load DLL\n"); return 1; } AddFunc add = (AddFunc)GetProcAddress(hDll, "Add"); if (add == NULL) { printf("Failed to get function pointer\n"); return 1; } int result = add(1, 2); printf("Result: %d\n", result); FreeLibrary(hDll); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值