civil.eng 发表于 2021-7-12 06:05:55

将列表从lisp传递到vb.net DLL

大家好,
我正在寻找一种将列表传递给DLL的方法,例如,我有一个实体名称和编号的列表:
(setq lst((
" 1))(
" 2))(
" 3))
另一方面,有一个. Net DLL用于对每个实体执行一些操作。
有人能给我一个解决方案吗?
**** Hidden Message *****

Jeff_M 发表于 2021-7-12 13:04:53

这应该可以
私有无效进程列表(列表
>theList)
{
var db=HostApplicationServices.WorkingDatabase
使用(Transaction tr=db.TransactionManager.StartTransaction())
{
foreach(列表中的var项)
{
ShapeFile shp=新的Esri.ShapeFile.Polygon()
多段线lwp=tr.GetObject(item.Key,OpenMode.ForRead)作为多段线
int:vn=lwp.numberoftexts
用于(int i=0;i
{
Point2d顶点=lwp.GetPoint2dAt(i)
shp.vertexs.Add(顶点X,顶点Y)
}
shp.字段[“文本”]。Value=item.Value.ToString()
shp.Create()
}
tr.Commit()
}
}

civil.eng 发表于 2021-7-14 10:00:02

lisp行应该是:
(mylispfunc“F:\\shp\\Poly.shp”列表)
,shpAdress将正确设置为该行。
然后它应该在.net代码中工作,如:
shp。运行(shpAdress)
请确保修改for(int i=2;…从3开始
这是我拥有的(我没有ESRI库,因此这些对象被注释掉)

公共结果缓冲mylispfunc(结果缓冲resBuf)
{
ResultBuffer:rbfResult=default(resultbufer)
var args=resBuf.AsArray()
var-theList=newlist
>()
var shpAdress=(字符串)args。值
对于(int i=3;i
{
列表。将(新的KeyValuePair)添加到<ObjectId,>((ObjectId)参数。值,(简称)args.Value))
}
进程列表(shaddress,theList)
rbfResult=newresultbuffer(新的TypedValue(Convert.ToInt32(5005),“probablesucces”)
返回结果
}
私有void进程列表(字符串shpAdress,List
>theList)
{
var db=HostApplicationServices.WorkingDatabase
使用(Transaction tr=db.TransactionManager.StartTransaction())
{
foreach(列表中的var项)
{
//ShapeFile shp=新的Esri.ShapeFile.Polygon()
多段线lwp=tr.GetObject(item.Key,OpenMode.ForRead)作为多段线
int:vn=lwp.numberoftexts
用于(int i=0;i
{
Point2d顶点=lwp.GetPoint2dAt(i)
//shp.vertexs.Add(顶点.X,顶点.Y)
}
//shp.Fields[“文本”]。Value=item.Value.ToString()
//shp.Create()
//shp.run(shpAdress)
}
tr.Commit()
}
}
页: [1]
查看完整版本: 将列表从lisp传递到vb.net DLL