2014-11-17 3 views
0

내가 변수 프리 D 문자열을 정의 할 델파이의 지시에 미리 컴파일 된 변수를 사용하여 델파이에 지시 {$ 포함}에서 사용 방법 : 보안상의 이유로정의하고 예를 들어,

{$define FILE_NAME "lockfile"} 
{$include FILE_NAME'.txt.1'} 
{$include FILE_NAME'.txt.2'} 
... 

(이 부분입니다), 우리는 일반적인 문자열과 파일 읽기 기능을 사용하고 싶지 않습니다. Delphi에서 이러한 목적을위한 기능이 있습니까?

+0

'$ INCLUDE'은 컴파일 타임에 소스 코드를 코드에 붙여 넣기 위해 사용됩니다. 네가 그 일을하고 싶다고 확신하니? 즉, 컴파일러는 이러한 파일을 Delphi 소스 코드로 처리하여 실행 가능 코드로 컴파일합니다. 텍스트를 리소스로 연결하려고합니다. 이렇게해도 보안이 향상되지는 않습니다. 링크 된 리소스 또는 보조 텍스트 파일도 마찬가지로 표시됩니다. 안전하지 않은 보안 기능을 작성하려고 시도하는 것처럼 보입니다. –

+1

@Hossein David가 말했듯이, 각 라이센스 사용자의 '소스'파일을 준비하고있는 것처럼 보입니다. 그런 다음 고유 한 빌드를 만듭니다. 그러나이 경우, * lockfile.txt를 $ include에 포함시키지 않는 이유는 무엇입니까? 우리가 더 많은 정보를 필요로하는 것 같습니다. [어떤 문제를 해결하려고합니까?] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378) –

+0

@David 몇 가지 상수 키를 포함하고 싶습니다. 컴파일하기 전에 내 코드를 쿼리하지만 각 고객마다 다릅니다 (각 고객에 대해 코드를 컴파일합니다). 컴파일 된 상수는 해킹하기가 더 어렵 기 때문에 데이터 파일이나 리소스로 첨부하고 싶지 않습니다. – Hossein

답변

2

$INCLUDE 지시어는 파일 이름에 간접를 지원하지 않습니다. 그래서, 다음 코드

const 
    someconst = 'foo'; 

{$INCLUDE someconst} 

다음과 같은 오류에 이르게 :

 
F1026 File not found: 'someconst.pas' 

당신이이 파일을 포함 사용해야하는 경우, 당신은 몇 가지 다른 방법으로 간접를 적용해야합니다. 한 가지 방법은 컴파일러가 검색 경로를 조사하여 포함 된 파일을 검색한다는 사실입니다. 따라서 각 클라이언트 고유의 include 파일을 다른 디렉토리에두면 빌드 프로세스의 일부로 클라이언트 특정 디렉토리를 검색 경로에 추가 할 수 있습니다.

FWIW, 나는 이것이 당신의 프로그램을 해킹에 면역이 될 것이라고 믿기 어렵다. 좀 더 가능성있는 결과는 프로그램이 해킹의 영향을 받기 쉽지만 프로그램을 작성하고 배포하는 것이 훨씬 어렵고 오류가 발생하기 쉽다는 것입니다.

+0

+1 FWIW 용 –

1

VCS 시스템을 올바르게 사용하면 요구 사항을 더 잘 충족시킬 수 있습니다. 고객 별 파일에 고객 별 데이터가있는 모든 고객에 대해 "지점"이 필요합니다. 이렇게하면 각 고객을 관리하기위한 복잡한 지시문을 사용하여 코드를 낭비하지 않아도됩니다. 파일 이름은 동일하게 유지되며 각 분기마다 내용이 다릅니다. 새로운 고객을 추가하기 위해서는 새 분기를 만들고 거기에 파일을 업데이트해야합니다.

그런 다음 당신은 각 지점을 얻을에 내장 된 고객 별 데이터를 사용하여 최종 실행 파일 (들)을 얻기 위해 각 고객에 대한 컴파일해야합니다.

+0

버전 2의 소프트웨어를 릴리스하고 수백 개의 지점을 업데이트해야 할 때가별로 재미있을 것 같지 않습니다. 그 말은 내게 아주 희한한 접근처럼 들린다. 실제로 VCS 분기를 사용하는 것은 고객 당 하나인데 VCS를 사용하는 것은 대단히 좋지 않으며 매우 열악한 솔루션이라고 할 수 있습니다. –

+0

고객 특정 파일에 대해서만 브랜치를 가질 수 있습니다. 각 파일에는 몇 개의 짧은 파일이 있어야합니다. 프로젝트는 "단일"브랜치에 포함될 필요가 없습니다. 서로 겹치지 않는 한 여러 브랜치의 파일을 사용할 수 있습니다 . 물론 "수백 가지"의 고객에게는 실현 가능한 솔루션이 될 수 없지만 애플리케이션에 몇 개만 있으면 완벽하게 작동합니다. 많은 사람들이 VCS 소프트웨어를 사용하여 버전의 10 %를 차지하고 있으며 주로 버전을 저장하고 전체 구성 관리를 수행하지 않습니다. – LDS