俺是静态调用这函数的,函数定义如下:
Function Dll_NodeTypeToCB_NodeType(NodeType: Integer): String;
Begin
   Case NodeType Of
   1: Result:= 'Key =按键';
  -1: Result:= 'null =空';
   5: Result:= 'SelfDef =自定义';
   6: Result:= 'Voice =语音';
   7: Result:= 'Time =时间设定';
   8: Result:= 'Exit =退出';
   9: Result:= 'Back =回到上一层';
  10: Result:= 'BackHead =返回到首层';
  22: Result:= 'Input =输入节点';
  17: Result:= 'Case =结果判断';
  19: Result:= 'Else =结果判断';
  15: Result:= 'Parameter =参数';
  28: Result:= 'Record =录音';
  38: Result:= 'Flash =闪烁';
   End;
End;
奇怪的是:
1:在调用此Dll函数后,她确能返回正确值如:
CB_NodeType.Text:= Dll_NodeTypeToCB_NodeType(i);//i是个Integer定义的常量,确认在Case条件中。运行完代码后才出现:Invalid Pointer Operation’错误提示。把调用她的代码屏蔽掉就不会出现这错误了。 
2:后来俺实在没办法,索性直接在单元中定义一个程序代码完全Copy的函数,竟然又运行正常了。奇怪,呵呵。望各位大侠帮忙,俺从来不欠帐啊,呵呵

解决方案 »

  1.   

    改声明
    Function Dll_NodeTypeToCB_NodeType(NodeType: Integer): PChar;Stdcall;
      

  2.   

    就是关注啦。
    好象在DLL里面用String类型会有点问题?
      

  3.   

    绝对是STRING的问题..因为它不是标准视窗系统的类型..
      

  4.   

    在DLL中用STRING类型要加上sharemem单元
    发布时要带上BORLANDMM.DLL
    最好不要这样使用、
      

  5.   

    Function Dll_NodeTypeToCB_NodeType(NodeType: Integer): Pchar;
      

  6.   

    对,尽量别用string型写DLL, 另外注意声明及调用时都要加stdcall