明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 507|回复: 13

哪位大佬帮忙写个alisp可调用的dll,获取鼠标屏幕坐标

[复制链接]
发表于 2024-5-26 13:13 | 显示全部楼层 |阅读模式
100明经币
本帖最后由 夏生生 于 2024-5-27 08:44 编辑

尚未学会C#,解决不了DCL插入点的问题,特来求助,谢谢各位

需求:
1.获取鼠标在屏幕上的坐标(可不在AutoCAD视窗),alisp可调用,例如
  1. (defun c:tt  ()
  2.     (setq pt (c#getMousePoint))
  3.     (setq id (load_dialog (findfile "tmp.dcl")))
  4.     (new_dialog "tmp" id "" pt)
  5.     (start_dialog)
  6.     (unload_dialog id))

2.C#,源代码(文本文件,网站代码视口有时候插入一些其他的东西),以后有基础了再学习,现在连编译都不会,还是fortran好,傻瓜式命令行编译
3.编译后的dll文件(针对任意版本autocad),下载了一个vscode,连环境都没搭建出来

最佳答案

查看完整内容

算了自己啃书
发表于 2024-5-26 13:13 | 显示全部楼层
算了自己啃书
回复

使用道具 举报

 楼主| 发表于 2024-5-26 21:28 | 显示全部楼层
本帖最后由 夏生生 于 2024-5-26 21:51 编辑

我尝试编写如下代码
  1. using System.Drawing;
  2. using System.Runtime.InteropServices;
  3. public class MouseHelper
  4. {
  5.     [DllImport("user32.dll")]
  6.     static extern bool GetCursorPos(out Point lpPoint);
  7.     public static Point GetMousePosition()
  8.     {
  9.         Point mousePos;
  10.         GetCursorPos(out mousePos);
  11.         return mousePos;
  12.     }
  13. }

编译成dll以后,regsvr32 dll,返回错误


再尝试
  1. (vl-cmdf"netload"(findfile "xty-get-mousepoint.dll"))
  2. (setq obj(vlax-create-object(findfile "xty-get-mousepoint.GetCursorPos")))

但是也不成功,哪位大佬指导一下啊,谢谢


回复

使用道具 举报

发表于 2024-5-27 17:18 | 显示全部楼层
什么版本的cad
回复

使用道具 举报

 楼主| 发表于 2024-5-27 17:30 | 显示全部楼层

2010以上,不是说.net和alisp一样基本没有版本问题吗?
回复

使用道具 举报

发表于 2024-5-28 20:46 | 显示全部楼层
  1. using System.Drawing;
  2. using System.Runtime.InteropServices;
  3. [assembly: CommandClass(typeof(MousePositionTest.MouseHelper))]

  4. namespace MousePositionTest
  5. {
  6.    
  7.     public partial class MouseHelper
  8.     {
  9.         [DllImport("user32.dll")]
  10.         static extern bool GetCursorPos(out Point lpPoint);
  11.         static Point GetMousePosition()
  12.         {
  13.             Point mousePos;
  14.             GetCursorPos(out mousePos);
  15.             return mousePos;
  16.         }
  17.         [LispFunction("GetCursorPosistion")]
  18.         public static ResultBuffer GetCursorPos1(ResultBuffer rb)
  19.         {
  20.             GetCursorPos(out Point lpPoint);
  21.             ResultBuffer rtn=new ResultBuffer();
  22.             rtn.Add(new TypedValue((int)LispDataType.Int16, lpPoint.X));
  23.             rtn.Add(new TypedValue((int)LispDataType.Int16, lpPoint.Y));
  24.             return rtn;

  25.         }
  26.     }
  27. }



这样可以的,netload编译后的文件,(GetCursorPosistion)可以作为内部函数找色

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
夏生生 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2024-5-29 00:20 | 显示全部楼层
本帖最后由 夏生生 于 2024-5-29 00:30 编辑
brainstorm 发表于 2024-5-28 20:46
这样可以的,netload编译后的文件,(GetCursorPosistion)可以作为内部函数找色

非常感谢您的帮助,但不知为何我没有成功
是否因为我不会编译?
文件夹里生成了dll文件,而且没提示错误,netload也成功,但是提示没有函数
  1. (vl-cmdf "netload"(findfile"ClassLibrary2.dll"))
  2. (GetCursorPosistion)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2024-5-29 16:34 | 显示全部楼层
public partial class MouseHelper改为 public static class MouseHelper看看行么

评分

参与人数 1明经币 +1 收起 理由
夏生生 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2024-5-29 19:13 | 显示全部楼层
brainstorm 发表于 2024-5-29 16:34
public partial class MouseHelper改为 public static class MouseHelper看看行么

这两天要加班,空下来试试,麻烦您了
回复

使用道具 举报

发表于 2024-5-30 19:48 | 显示全部楼层
修改框架,用net standard,直接参考ifox的.csproj文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-18 21:46 , Processed in 0.266839 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表